Невозможно найти точку входа (cpp) - PullRequest
2 голосов
/ 05 декабря 2010

Этот вопрос похож на этот .

Я хочу экспортировать простую функцию из C ++, которая будет вызываться из C # через PInvoke.Это мое определение функции:

 int fnValue()
{
    return 42;
}

И это определение экспорта в .h файле:

__declspec(dllexport)  int fnValue();

Вот как я запускаю функцию:

    [DllImport("WhatDll.dll")]
    public static extern int fnValue();

Просто, верно?Но я получил

System.EntryPointNotFoundException: Невозможно найти точку входа 'с именем' fnValue 'в DLL «WhatDll.dll»

Я использую дампбин, чтобы проверить, чтовнутри WhatDll, и вот что у меня есть:

00000000 характеристики 4CFB5C95 отметка времени даты Вс Дек 05 17:34:13 2010 0,00 версия 1 порядковый номер 4 число функций 4 количество имен

порядковый совет Имя RVA

   1    2 00011014 ?fnValue@@YAHXZ = @ILT+15(?fnValue@@YAHXZ)

Обратите внимание, что за именем функции стоит какая-то тарабарщина fnValue.

Это довольно загадочно. Есть идеи?

Ответы [ 2 ]

4 голосов
/ 05 декабря 2010

Попробуйте написать

extern "C"__declspec(dllexport)  int fnValue();
0 голосов
/ 05 декабря 2010

Если вы компилируете с помощью компилятора c ++, используйте extern "C" для экспорта или добавьте файл .def, чтобы указать имена для экспорта.Дополнительно __stdcall может понадобиться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...