找不到 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 入口点的主要内容,如果未能解决你的问题,请参考以下文章
打开sql提示ssms.exe找不到入口提示乱码找不到动态链接库msvcr80.dll
在 VBA 中使用 UnmanagedExports 包 [DllExport] 调用 C# DLL 触发“找不到 DLL 入口点”错误