为什么我会收到 "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.exeDLL_Test.dll 我得到以下

File Type: DLL

  Summary

        1000 .data
        1000 .idata
        2000 .rdata
        1000 .reloc
        1000 .rsrc
        4000 .text
       10000 .textbss

我不确定我错过了什么,有什么想法吗?提前致谢。

名称修改。 extern "C" 并没有关闭它,它只是改变了规则。

您的调用约定也不匹配。

您可以通过 C++ 函数的 __stdcall 关键字同时解决这两个问题。