none
Подключение C# dll к проекту на C++ RRS feed

  • Вопрос

  • Доброго времени суток. Прошу подсказки в создании функции на C# (DLL).

    Есть модуль, библиотека (dll) написанная на C++ экспортирующая функцию фрагмент кода:

    char mess[]="test";
    char* pascal DLL_EXP ShowMessage(HWND hWnd){
      return(mess);
    }

    Необходимо написать модуль (библиотеку (dll)) на C# для приложения на С++ (исходники отсутствуют) с аналогичной функцией. 

    Пробовал так:

    [System.Reflection.Obfuscation(Feature = "DllExport")]
    unsafe IntPtr ShowMessage(IntPtr hWnd)
    {
         string str = "test";
         IntPtr pStr = Marshal.StringToHGlobalUni(str);
         return pStr;
    }
    Все компилируется, функция из библиотеки экспортируется, но тестовая надпись не отображается.

    8 декабря 2015 г. 7:48

Ответы

  • Никак. Ведь некому запустить и захостить CLR.

    Можно лишь экспортировать COM объект, в этом случае инфраструктура активации COM возьмет на себя запуск и хостиг CLR. 

    Напишите вашу DLL на C++ (не на C++/CLR конечно), благо код простейший.

    Кстати, ваш код содержит по меньшей мере две ошибки. Если бы это работало то у вас при каждом вызове была бы утечка памяти и строка возвращалась бы в неверной кодировке.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    8 декабря 2015 г. 17:16
    Модератор

Все ответы

  • Может быть я отстал от жизни, но мне до сих пор казалось, что DLL на C# - это сборка .net framework, она не может экспортировать функции для неуправляемого кода. По-моему, Вы двигаетесь не в том направлении.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    8 декабря 2015 г. 13:46
  • Никак. Ведь некому запустить и захостить CLR.

    Можно лишь экспортировать COM объект, в этом случае инфраструктура активации COM возьмет на себя запуск и хостиг CLR. 

    Напишите вашу DLL на C++ (не на C++/CLR конечно), благо код простейший.

    Кстати, ваш код содержит по меньшей мере две ошибки. Если бы это работало то у вас при каждом вызове была бы утечка памяти и строка возвращалась бы в неверной кодировке.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    8 декабря 2015 г. 17:16
    Модератор
  • Может быть я отстал от жизни, но мне до сих пор казалось, что DLL на C# - это сборка .net framework, она не может экспортировать функции для неуправляемого кода. По-моему, Вы двигаетесь не в том направлении.

         DLL на C# может экспортировать функции для неуправляемого кода. Если кому интересно вот ссылка http://jonxxx.me/13-metatrader/15-eksport-funktsij-iz-net-dll-c-dllexport-net-framework-v-metatrader (права не позволяют добавлять ссылки через ББ код)

    Всем спасибо за помощь. Проблема решена.

    Ошибка была в объявлении функции. 

    unsafe IntPtr ShowMessage(IntPtr hWnd)

    //вместо

    public static unsafe IntPtr ShowMessage(IntPtr hWnd)


    9 декабря 2015 г. 11:16
  • У вас же вроде задача наоборот была?

    Сделаем содержимое сообщества лучше, вместе!

    9 декабря 2015 г. 11:53
    Модератор