Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Suslo
2 / 2 / 0
Регистрация: 30.11.2013
Сообщений: 80
Завершенные тесты: 1
#1

Тело на с++, интерфейс на с#. Как сляпать это добро? - C++

23.01.2014, 17:24. Просмотров 340. Ответов 4
Метки нет (Все метки)

Ну, собственно, хочу сделать программу на с++, привязав к ней интерфейс из с#. Как осуществить привязку? Поподробнее, плиз. На спасибо не скуплюсь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 17:24     Тело на с++, интерфейс на с#. Как сляпать это добро?
Посмотрите здесь:

Как реализовать вне класса тело метода? - C++
int &operator(int j){ if (n< j || j >= n) {cout << "\nIndex out of bounds"; Sleep(2000); exit(1);} return vec; } ...

Тело POST запроса. Как самому узнать, что там должно быть? - C++
Всем здрасти! У меня следующая делема... Нагуглил POST запрос на авторизацию на одноклассниках. Тело POST запроса имеет следующий...

Есть функция A принимающая прараметром указатель на функцию B. Как вместо последнего вставить тело B? - C++
#include<stdio.h> #include <algorithm> using namespace std; char s="abcd"; bool IsOdd (char i) {return strchr (s, i);} ...

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? - C++
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Как разделять интерфейс и данные? - C++
Всем привет, Собственно, нужно ли разделять GUI и функции работы с данными? Если да (надеюсь, что да), то какие общие принципы...

Как использовать интерфейс объекта? - C++
Привет форумчане! В общем, изучаю плюсы и столкнулся с такой проблемой для себя, что не могу откастить до интерфейса. Есть...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TeachMeC
18 / 18 / 4
Регистрация: 10.01.2014
Сообщений: 45
23.01.2014, 18:48     Тело на с++, интерфейс на с#. Как сляпать это добро? #2
1) COM (лично дела не имел )
2) C++/CLI
3) технология Pinvoke
Выбирайте

Не по теме:

Цитата Сообщение от Suslo Посмотреть сообщение
На спасибо не скуплюсь
ради бога , не надо мне спасибок

MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
23.01.2014, 19:01     Тело на с++, интерфейс на с#. Как сляпать это добро? #3
Интерфейс на C#, код на С++: возможно ли?
t1m0n
606 / 393 / 21
Регистрация: 03.11.2009
Сообщений: 1,822
23.01.2014, 22:11     Тело на с++, интерфейс на с#. Как сляпать это добро? #4
может лучше сделать на Qt
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 13:39     Тело на с++, интерфейс на с#. Как сляпать это добро?
Еще ссылки по теме:

Как изменить интерфейс программы? - C++
Я новичок в С++, и мне не нравится, что окно котрое открывается после запуска программы, чёрное! Как изменить дизайн, интерфейс программы?

Как экспортировать интерфейс из dll - C++
делал всё по примеру в инете, не работает код интерфейса struct I_MyInterface { virtual bool Init(int parms)=0; ...

Как сделать качественный интерфейс в с++? - C++
Как сделать качественный интерфейс в с++?

Как создать интерфейс для программы? - C++
Здравствуйте. Подскажите, Как создать графический интерфейс. К примеру написал прогу(исходник), тот же конвертер валют или калькулятор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TeachMeC
18 / 18 / 4
Регистрация: 10.01.2014
Сообщений: 45
24.01.2014, 13:39     Тело на с++, интерфейс на с#. Как сляпать это добро? #5
Suslo, портировал 3 функции (всего)
из msvcrt.dll : fopen, fgets, fclose
У вас будут свои функции или своя .dll.
Цитата Сообщение от TeachMeC Посмотреть сообщение
2) C++/CLI
В случае с C++/CLI функции помещаются в управляемую сборку.
Сборка потом добавляется к проекту на C#
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// CPPCliClassLibrary1.h
 
#pragma once
 
#include <cstdio>
#include <cstring>
#include <vcclr.h>
using namespace System;
using namespace System::Runtime::InteropServices;
 
namespace CPPCliClassLibrary1 {
 
 
    public ref class FileReader 
    {
    public:
        FileReader(String^ fileName);
        ~FileReader();
        !FileReader();
        void FileClose();
        String^  ReadString();
        static FILE * FileReader::OpenFile(String^ fileName);
    private:
        FILE * pFile;
        bool disposed;
 
    };
 
    FileReader::FileReader(String^ fileName) 
        : disposed ( false), pFile(OpenFile(fileName))
    {
    }
 
    FILE * FileReader::OpenFile(String^ fileName)
    {
      
        const char* chFileName = (const char*)(Marshal::StringToHGlobalAnsi(fileName)).ToPointer();    
        FILE * mFile = fopen (chFileName, "r");
        Marshal::FreeHGlobal(IntPtr((void*)chFileName ));
        return mFile;
    }
 
    FileReader::~FileReader()
    {
        if( !  disposed)
            this->!FileReader();
    }
 
    FileReader::!FileReader()
    {
        fclose(pFile);
    }
 
    void FileReader::FileClose()
    {
        fclose(pFile);
        disposed = true;
    }
 
    String^  FileReader::ReadString()
    {    
        char buffer[100]= {{'\0'}}; 
        fgets (buffer , 100 , pFile);
        return gcnew String(buffer);    
    }
}

Цитата Сообщение от TeachMeC Посмотреть сообщение
3) технология Pinvoke
Пишем класс на C#, в нем используем функции из msvcrt.dll
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 public class FileReader : IDisposable
    {
        #region Native Methods
        [DllImport("msvcrt.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
        static extern IntPtr fopen(String filename, String mode);
        [DllImport("msvcrt.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
        static extern Int32 fclose(IntPtr file);
        [DllImport("msvcrt.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
        static extern IntPtr fgets(StringBuilder str, int num, IntPtr stream);
        #endregion
 
      
        public FileReader(String fileName)
        {
            pFile = fopen(fileName, "r");
        }
        ~FileReader()
        {
            if (!disposed)
            {
                disposed = true;
                Dispose(false);
            }
        }
 
        public String ReadString()
        {
            StringBuilder stringBuilder = new StringBuilder(100);
            fgets(stringBuilder, 100, pFile);
            return stringBuilder.ToString();
        }
        private readonly IntPtr pFile;
        public bool disposed = false;
 
 
 
 
        public void Dispose()
        {
            if (!disposed)
            {
                disposed = true;
                Dispose(true);
                GC.SuppressFinalize(this);
            }
        }
 
        public void Close()
        {
            Dispose();
        }
 
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                // managed objects
            }
            // unmanaged objects and resources
            fclose(pFile);
        }
 
 
    }

Вызов будет одинаковый в обоих случаях. Например в C#WindowsForms.
При нажатии кнопки RichTextBox заполнится содержимым файла
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  const string filepath = @"Documents\myTextFile.txt";
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (! System.IO.File.Exists(filepath))
            {
                 
                MessageBox.Show("File not found");
                return;
            }
           
                using (FileReader fileReader = new FileReader(filepath))
                {
                    while (true)
                    {
                        String line = fileReader.ReadString();
                        if (String.IsNullOrEmpty(line))
                        {
                            break;
                        }
                        richTextBox1.AppendText(line);
                    }
                }
           
        }
Yandex
Объявления
24.01.2014, 13:39     Тело на с++, интерфейс на с#. Как сляпать это добро?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru