У меня возникли проблемы с вызовом функции C++ из dll в проекте VB.net. Я попытался с простыми примерами, показанными нижеПочему я получаю сообщение «Не удалось найти точку входа с именем« SquareRoot »в DLL»?
Для C++ длл
#include <cmath>
extern "C" __declspec(dllexport) double SquareRoot(double value)
{
return pow(value, 0.5);
}
Я строю DLL и скопировать его в папку VB.net
Для проекта VB.net
Module Module1
<Runtime.InteropServices.DllImport("DLL_Test.dll")> _
Private Function SquareRoot(ByVal value As Double) As Double
End Function
Sub Main()
MsgBox(SquareRoot(2))
End Sub
End Module
Я продолжаю получать Additional information: Unable to find an entry point named 'SquareRoot' in DLL 'DLL_Test.dll'
. Когда я бегу dumpbin.exe
на DLL_Test.dll
я получаю следующее
File Type: DLL
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
Я не уверен, что мне не хватает, какие-то идеи? Заранее спасибо.
Вы использовали '/ exports', когда вы запускали' dumpbin'? –
Кроме того, глобальная функция 'pow' поступает от' '. '' предоставляет 'std :: pow' вместо этого. –
Похоже, что вы можете столкнуться с именем mangling на стороне C++. Вы можете использовать Dependency Walker (http://www.dependencywalker.com/) для просмотра фактического имени функции, которое экспортирует код C++. Кроме того, этот вопрос может помочь: http://stackoverflow.com/questions/1467144/how-do-i-stop-name-mangling-of-my-dlls-exported-function – Slapout