找不到 DLL 入口点

Posted

技术标签:

【中文标题】找不到 DLL 入口点【英文标题】:Can't find DLL entry point 【发布时间】:2012-12-08 11:44:19 【问题描述】:

我一直在尝试在我的 VBA 项目中调用 DLL 函数,但我不断收到以下错误消息:

Run-time error '453': Can't find DLL entry point "CheckStatus" in "Power.dll"

这是 C++ 文件中 DLL 的定义:

#define CLASS_DECLSPEC extern "C" __declspec(dllexport)

CLASS_DECLSPEC int __stdcall CheckStatus();

这就是我试图声明它并在 VBA 中调用它的方式:

Public Declare Function CheckStatus Lib "Power.DLL" () As Long

Dim test As Long
test = CheckStatus

然后当我运行它时收到上述错误消息。

有谁知道如何解决这个问题?谢谢。

【问题讨论】:

【参考方案1】:

使用thisMSDN文章,我会尝试这种声明函数的方法:

Public Declare Function CheckStatus Lib "Power.DLL" Alias "_CheckStatus@0" () As Long

【讨论】:

【参考方案2】:

这与名称修改有关(即使是 extern "C")。 看看 DLL 中真正的导出是什么,猜测可能是 _CheckStatus_CheckStatus@0。 要强制名称保持原样,请在您的项目中创建一个 .def 文件,其中包含以下内容:

EXPORTS
    CheckStatus=CheckStatus

【讨论】:

是的,函数的名称是_CheckStatus@0。我要修改声明语句还是调用语句?两者都有? 对不起,我对 VB 和 VBA 有点陌生。您可以在 VBA 中创建.DEF 文件还是需要 VB6?因为我们没有VB6。 我正在尝试搜索,但无法弄清楚如何创建 .DEF 文件。我可以用 VBA 做到这一点吗?我无权访问 DLL 的源代码。我不介意名称修饰,如果它意味着只要它工作就用神秘的名称调用函数。 @JohnSmith:def 文件进入 c++ 项目。 有没有办法在不访问C++项目的情况下调用函数?

以上是关于找不到 DLL 入口点的主要内容,如果未能解决你的问题,请参考以下文章

找不到 DLL 入口点

使用 webpack 时节点找不到模块“fs”

关于:找不到.dll文件||已加载但找不到入口点的解决方法

打开sql提示ssms.exe找不到入口提示乱码找不到动态链接库msvcr80.dll

在 VBA 中使用 UnmanagedExports 包 [DllExport] 调用 C# DLL 触发“找不到 DLL 入口点”错误

加载DLL文件时出错,找不到指定的模块,如何解决?