На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Гибрид WPF и С++ , Как скрестить C#WPF и код C++
    Уважаемые форумчане , хотелось бы услышать ваше мнение по поводу проекта у которого фейс на C#WPF ,
    а вся "механика" на С/С++ , ассемблер.
      Для этого в студии есть специальная прокладка 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 или как нибудь типа того.
        Общая технология такая:
        - делаешь dll проект на этом C++/CLI
        - пишешь там класс обертку над своим .NET классом на С++/CLI, ессно экспортируешь его.
        - далее уже из C++ кода дергаешь методы из этой библиотеки-обертки(или наоборот в этой прокладке дергаешь C/C++ методы/функции и дергаешь их уже из своего .NET приложения)
        PROFIT.
          KILLER ОК большое спасибо , сейчас изучаю эти ссылки
            KILLER
            большое спасибо , изучал приведенные ссылки, полностью определился с дальнейшим планом действий по конструированию DLL-ки обертки, да теперь понятно что путь только один через С++/CLI
              Надо только не забывать, что некоторые типы данных могут расходится по бинарному формату. Скажем, те же строки - они в дотнете все юникодные, а в C++, скорее всего, однобайтовые в какой-то кодировке. Гонять туда-сюда - может быть просадка по производительности при большим объёмах.
                Цитата Mr.Delphist @
                Надо только не забывать, что некоторые типы данных могут расходится по бинарному формату.

                да вот насчет этого я читал , и везде сказано что лучше всего делать прослойку а то и две

                Цитата Mr.Delphist @
                Скажем, те же строки - они в дотнете все юникодные, а в C++, скорее всего, однобайтовые в какой-то кодировке.

                ага ага дада да так и есть это я уже споткнулся когда хотел сразу подключить эти dll-ки в С#
                хорошо прошла толька одна функция (которая ни чего не возращает :) )
                  Перегнать строки из однобайтовых в NET-юникодные внутри C++/CLI можно как-то так:
                  ExpandedWrap disabled
                    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()
                    Mr.Delphist
                    извиняюсь , не заметил Вашег сообщения, не даработка форума не вижу ветки которые я создал и которые обнавляются записи в ветках в которых я принимал участие

                    Цитата Mr.Delphist @
                    Перегнать строки из однобайтовых в NET-юникодные внутри C++/CLI можно как-то так:

                    ОК спосибо за наводку , буду пробовать , только с C++/CLI я сейчас притормозил на недельку , попробую все таки напрямую из C# без прослоек иметь DLL-ку (в культурном смысле этого слова)
                      Дык а форматы данных от этого никуда не денутся. Строка из ASCII сама собой дотнетным юникодом не станет.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0262 ]   [ 16 queries used ]   [ Generated: 29.03.24, 05:09 GMT ]