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

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

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

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

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

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

Сколько стоит всё это добро? - Оценка комплектующих
Добрый день. Хочу купить ноутбук взамен моего малыша. Очень интересно во сколько вы его оцените. Корпус zalman Z12 Материнская плата...

кто знает, как это делается (интерфейс)? - Delphi
Доброго всем утра / дня / поздней ночи! Все видели в программах следующий интерфейс: Меня интерисует следующие вопросы: ...

Веб интерфейс для внешнего устройства.Как это сделать? - JavaScript
Доброго времени суток. Есть устройство имитирующее состояние летательного аппарата(скорость, высота, координаты и т.д). Подключение по...

Сколько времени тело будет скользить по платформе и какое расстояние оно пройдет за это время? - Механика
помогите решить плиз !!!!Неподвижное тело массой m опускается плавно на массивную платформу (М>> m), движущуюся со скоростью v0=4м/c (рис....

пожалуйста, крайне нужна программа, тело брошенное горизонтально вниз, чтобы это показывалось графически - Pascal ABC
пожалуйста, крайне нужна программа, тело брошенное горизонтально вниз, чтобы это показывалось графически, и еще желательно чтобы было как...

Изобразить тело, ограниченное данными поверхностями. указать тип поверхностей, ограничивающих тело - Геометрия
Здравствуйте! Нуждаюсь в помощи, ибо на лекциях этого ещё не было, а на практике уже надо сдавать. Изобразить тело, ограниченное данными...

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

Не по теме:

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

0
MicM
822 / 489 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
23.01.2014, 19:01 #3
Интерфейс на C#, код на С++: возможно ли?
0
t1m0n
621 / 397 / 21
Регистрация: 03.11.2009
Сообщений: 1,829
23.01.2014, 22:11 #4
может лучше сделать на Qt
0
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);
                    }
                }
           
        }
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 13:39
Привет! Вот еще темы с ответами:

Тело совершает колебания по закону. Определить силу, действующую на тело, и его кинетическую энергию. - Колебания и волны
Тело массой m совершает колебания по закону x={x}_{0}sin\omega t. Определить силу, действующую на тело, и его максимальную кинетическую...

Вирус svchost.exe. Чем просмотреть само тело файла, чтобы понять, вирус это или нет - Удаление вирусов
NOD32 выдавал угрозу каждые 5 секунд - вирус Qhosts троянская программа очищен удалением. Нашла рекомендации, как выделить этот вирусный...

Если программа написана на c# это означает что ее интерфейс создан с использованием визуального конструктора? - .NET
Например от AutoDesk:AutoCad и мой любимый 3ds max.они на шарпе.это значит что их создали с помощью wpf или подрбного? если нет то как...

Как убрать коментарий на сайт в интернете ". мир! Добро пожаловать - WordPress
Коментарии к сайту в браузере: &quot;.. мир! Добро пожаловать в WordPress. Это ваша первая запись. Отредактируйте или удалите её, затем...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.01.2014, 13:39
Ответ Создать тему
Опции темы

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