Точка входа не найдена Исключение
Я пытаюсь использовать неуправляемую dll С++ в проекте С#, и я получаю сообщение об ошибке при попытке вызвать функцию, в которой говорится, что точка входа не найдена.
public class Program
{
static void Main(string[] args)
{
IntPtr testIntPtr = aaeonAPIOpen(0);
Console.WriteLine(testIntPtr.ToString());
}
[DllImport("aonAPI.dll")]
public static extern unsafe IntPtr aaeonAPIOpen(uint reserved);
}
Вот дамбина для функции:
5 4 00001020 [email protected]@[email protected]
Я изменил импорт dll на [DllImport("aonAPI.dll", EntryPoint="?aaeonAPIOpen")]
и [DllImport("aonAPI.dll", EntryPoint="_aaeonAPIOpen")]
и не повезло.
Ответы
Ответ 1
Используя утилиту undname.exe, этот символ соединяется с
void * __cdecl aaeonAPIOpen(unsigned long)
Что делает правильное объявление:
[DllImport("aonAPI.dll", EntryPoint="[email protected]@[email protected]",
ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr aaeonAPIOpen(uint reserved);
Ответ 2
Похоже, что функция, которую вы пытаетесь вызвать, скомпилирована как функция С++, и, следовательно, ее имя искажено. PInvoke не поддерживает искаженное имя. Вам нужно добавить внешний блок "C" вокруг определения функции, чтобы предотвратить изменение имени
extern "C" {
void* aaeonAPIOpen(uint reserved);
}