Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.229.110.49] |
|
Сообщ.
#1
,
|
|
|
Уважаемые форумчане , хотелось бы услышать ваше мнение по поводу проекта у которого фейс на C#WPF ,
а вся "механика" на С/С++ , ассемблер. |
Сообщ.
#2
,
|
|
|
Для этого в студии есть специальная прокладка C++/CLI подробнее можно почитать например тут:
https://habrahabr.ru/post/111071/ https://msdn.microsoft.com/ru-ru/library/68td296t.aspx https://habrahabr.ru/post/47732/ https://www.codeproject.com/Articles/721062...I-for-Beginners ... Ну или в гугле поискать по c++/cli example или как нибудь типа того. |
Сообщ.
#3
,
|
|
|
Общая технология такая:
- делаешь dll проект на этом C++/CLI - пишешь там класс обертку над своим .NET классом на С++/CLI, ессно экспортируешь его. - далее уже из C++ кода дергаешь методы из этой библиотеки-обертки(или наоборот в этой прокладке дергаешь C/C++ методы/функции и дергаешь их уже из своего .NET приложения) PROFIT. |
Сообщ.
#4
,
|
|
|
KILLER ОК большое спасибо , сейчас изучаю эти ссылки
|
Сообщ.
#5
,
|
|
|
KILLER
большое спасибо , изучал приведенные ссылки, полностью определился с дальнейшим планом действий по конструированию DLL-ки обертки, да теперь понятно что путь только один через С++/CLI |
Сообщ.
#6
,
|
|
|
Надо только не забывать, что некоторые типы данных могут расходится по бинарному формату. Скажем, те же строки - они в дотнете все юникодные, а в C++, скорее всего, однобайтовые в какой-то кодировке. Гонять туда-сюда - может быть просадка по производительности при большим объёмах.
|
Сообщ.
#7
,
|
|
|
Цитата Mr.Delphist @ Надо только не забывать, что некоторые типы данных могут расходится по бинарному формату. да вот насчет этого я читал , и везде сказано что лучше всего делать прослойку а то и две Цитата Mr.Delphist @ Скажем, те же строки - они в дотнете все юникодные, а в C++, скорее всего, однобайтовые в какой-то кодировке. ага ага дада да так и есть это я уже споткнулся когда хотел сразу подключить эти dll-ки в С# хорошо прошла толька одна функция (которая ни чего не возращает ) |
Сообщ.
#8
,
|
|
|
Перегнать строки из однобайтовых в NET-юникодные внутри C++/CLI можно как-то так:
stdext::cvt::wstring_convert<std::codecvt_utf8<wchar_t>> convert; // конвертер, в данном случае из однобайтового UTF-8 формата // char *p1, *p2 и т.д. - указатели на однобайтовые строки длиной len1, len2 и т.д. соответственно Platform::String^ s1 = ref new Platform::String(convert.from_bytes(p1, p1 + len1).c_str()); Platform::String^ s2 = ref new Platform::String(convert.from_bytes(p2, p2 + len2).c_str()); ... Ну и для обратной конвертации у того же конвертера есть метод to_bytes(), куда можно подоткнуть s1->Data() |
Сообщ.
#9
,
|
|
|
Mr.Delphist
извиняюсь , не заметил Вашег сообщения, не даработка форума не вижу ветки которые я создал и которые обнавляются записи в ветках в которых я принимал участие Цитата Mr.Delphist @ Перегнать строки из однобайтовых в NET-юникодные внутри C++/CLI можно как-то так: ОК спосибо за наводку , буду пробовать , только с C++/CLI я сейчас притормозил на недельку , попробую все таки напрямую из C# без прослоек иметь DLL-ку (в культурном смысле этого слова) |
Сообщ.
#10
,
|
|
|
Дык а форматы данных от этого никуда не денутся. Строка из ASCII сама собой дотнетным юникодом не станет.
|