У меня есть DLL поставщика, предназначенная для вызова из C++, но мне нужно вызвать ее из C#.Как вызвать методы из библиотеки C++ в C#
Используя приложение под названием PE Explorer можно увидеть список экспортируемых методов в DLL (назовем его Protocol.dll сейчас) и даже получить «недекорированного C++ Функция» подпись так:
public: unsigned int __thiscall Myco::Protocol::tMultiThingClient::GetThings(char (* const)[16],unsigned int)
Как использовать что-то подобное на C#? Я знаю, что я использую DllImport, я просто не знаю, как перейти от подписи выше к соответствующей подписи DllImport.
Всего WAG:
[DllImport("Protocol.dll", EntryPoint="GetThings")]
public static extern void GetThings(ref string[], uint);
Это даже близко? Есть ли где-нибудь ссылка, которая переводит между объявлениями C++, такими как char (* const)[16]
и их эквивалентами C#?
Этот вопрос задается еженедельно на SO. Если вы вызываете функцию члена C++, вы должны использовать CallingConvention.ThisCall. Однако каждый раз, когда кто-то спрашивает об этом на SO, ответ всегда «не делайте этого, пишите обертку C++/CLI». Это намного проще. –
http://www.mono-project.com/docs/advanced/pinvoke/, вероятно, лучшая доступная информация, если вы не хотите писать свою собственную обертку. – BlamKiwi