2012-03-03 3 views
0

У меня есть DLL с набором функций. DLL использовалась с «themidia», чтобы сделать ее безопасной.не может вызывать функцию C++ из C#

Когда я пытаюсь вызвать функции, C# выплевывает ошибки из-за имен функций.

[DllImport("safety.dll", CallingConvention=CallingConvention.StdCall, ExactSpelling=true)] 
private static extern IntPtr [email protected](string string_0, string string_1); 

Если я удалю @ 8 и удалю ExactSpelling = true, он просто возвращает исключение, не указывая точку входа.

Что именно я делаю неправильно?

+0

Я не знаком с «Themida», но вполне возможно, что процесс изменил способ экспорта ваших методов из DLL. Попробуйте открыть 'safety.dll' с помощью [Dependency Walker] (http://www.dependencywalker.com/) и искать настоящее имя метода. Это также может быть несоответствием с Calling Conventions. – AVIDeveloper

+0

Возможный дубликат функций [themidia virtual C++ DLL нельзя вызывать из-за @ в имени] (http://stackoverflow.com/questions/9549735/themidia-virtual-c-dll-functions-can-not-be-called -dee-in-name) –

ответ

3

Удалить «@», а в атрибуте добавить EntryPoint="[email protected]"

+0

Это сработало, спасибо миллиону человек! –

0

В качестве альтернативы указания EntryPoint, как rfmodulator предложил, вы можете использовать extern "C" в вашем C++ источник, который сделает имена экспортируемых функций так же, как их имена в источнике C++.

Компилятор C++ обычно управляет именами функций, так что вы можете иметь перегруженные функции (функции с тем же именем, что и различные параметры).

Смежные вопросы