为什么我会收到 "Unable to find an entry point named 'SquareRoot' in DLL" 消息?
Why am I getting a "Unable to find an entry point named 'SquareRoot' in DLL" message?
我在 VB.net 项目中从 dll 调用 C++ 函数时遇到问题。我尝试了下面显示的简单示例
对于 C++ dll
#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
我不确定我错过了什么,有什么想法吗?提前致谢。
名称修改。 extern "C"
并没有关闭它,它只是改变了规则。
您的调用约定也不匹配。
您可以通过 C++ 函数的 __stdcall
关键字同时解决这两个问题。
我在 VB.net 项目中从 dll 调用 C++ 函数时遇到问题。我尝试了下面显示的简单示例
对于 C++ dll
#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
我不确定我错过了什么,有什么想法吗?提前致谢。
名称修改。 extern "C"
并没有关闭它,它只是改变了规则。
您的调用约定也不匹配。
您可以通过 C++ 函数的 __stdcall
关键字同时解决这两个问题。