2010-12-05 2 views
2

Это аналогичный вопрос this one.Невозможно найти точку входа (cpp)

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

int fnValue() 
{ 
    return 42; 
} 

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

__declspec(dllexport) int fnValue(); 

Это, как я PInvoke функцию:

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

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

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

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

00000000 характеристики 4CFB5C95 время дата штемпеля Вс Дек 05 17:34:13 2010 0.00 версияпорядкового баз 4 количества функций 4 количества имен

порядкового имя намека RVA

1 2 00011014 [email protected]@YAHXZ = @ILT+15([email protected]@YAHXZ) 

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

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

ответ

4

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

extern "C"__declspec(dllexport) int fnValue(); 
+0

@ Спасибо, любая причина, по которой мне нужно «extern» C «` спереди? – Graviton 2010-12-05 10:40:08

0

При компиляции с использованием C++ компилятор extern "C" экспортировать или добавить DEF-файл, чтобы указать имена экспорта. Дополнительно __stdcall может понадобиться

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