Лучший отвечающий
Подключение C# dll к проекту на C++

Вопрос
-
Доброго времени суток. Прошу подсказки в создании функции на 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.
- Предложено в качестве ответа YatajgaModerator 9 декабря 2015 г. 11:53
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 4 января 2016 г. 11:15
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.
- Предложено в качестве ответа YatajgaModerator 9 декабря 2015 г. 11:53
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 4 января 2016 г. 11:15
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Модератор