Подтвердить что ты не робот

Точка входа не найдена Исключение

Я пытаюсь использовать неуправляемую 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")] и не повезло.

4b9b3361

Ответ 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);
}