找不到DLL入口点

3

我一直在尝试在我的VBA项目中调用DLL函数,但是我一直收到这个错误信息:

运行时错误'453': 找不到“Power.dll”中的DLL入口点“CheckStatus”

以下是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

当我运行它时,收到了上述的错误信息。

有人知道如何解决吗?谢谢。

2个回答

4

这与名称混淆有关(即使使用了extern "C")。
看看导出的DLL文件中实际的名称,猜测可能是_CheckStatus_CheckStatus@0
如果想要强制名称保持不变,请在项目中创建一个.def文件,文件内容如下:

EXPORTS
    CheckStatus=CheckStatus

是的,函数名是_CheckStatus@0。我需要修改声明语句还是调用语句?两个都需要修改吗? - John Smith
抱歉,我对VB和VBA还不太熟悉。你能否在VBA中创建一个.DEF文件,还是需要VB6?因为我们没有VB6。 - John Smith
我正在尝试搜索,但无法弄清如何创建.DEF文件。我可以使用VBA吗?我没有访问DLL源代码的权限。如果这意味着只需使用加密名称调用函数,我不介意名称混淆,只要它能正常工作。 - John Smith
@JohnSmith:def文件放在C++项目中。 - Daniel
有没有办法在没有访问C++项目的情况下调用函数? - John Smith
@JohnSmith:你可以使用别名,例如 LIb "something.dll" Alias "name@0" - Daniel

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接