大家下午好。
我今天在玩 Excel 和 VBA 加载一些 DLL,看看我会遇到什么样的麻烦。
我制作了自己的非常简单的 DLL 来尝试一下。我一生都无法弄清楚为什么,但是当我尝试运行时,我不断收到“找不到指定的 DLL 函数”消息。
这是我的工作簿中的内容...
Private Declare Sub MouseClick Lib "\location\of\myDLL" Alias "_MouseClick" ()
'I have also tried...
'Private Declare Sub MouseClick Lib "\location\of\myDLL" ()
Sub Test()
MouseClick
End Sub
这是我在 DLL 中的简单函数声明...
extern "C"
{
void MouseClick();
...
}
我想也许我的函数的名称在编译时被破坏了,所以我用'nm'来检查......
$ nm myDLL.dll | grep MouseClick
6df81254 T _MouseClick
$ nm -C myDLL.dll | grep MouseClick
6df81254 T MouseClick
我不明白...我已经使用了这两种方法来尝试使其正常工作。另外,我反汇编了一个使用 gdb 调用 MouseClick 函数的函数...
$ gdb myDll.dll
(gdb) disass testFunction
Dump of assembler code for function testFunction:
0x6df81327 <+0>: push %ebp
0x6df81328 <+1>: mov %esp,%ebp
...
0x6df81361 <+58>: call 0x6df81a44 <SetCursorPos@8>
0x6df81366 <+63>: sub $0x8,%esp
-> 0x6df81369 <+66>: call 0x6df81254 <MouseClick>
0x6df8136e <+71>: jmp 0x6df8138a <testFunction+99>
...
0x6df8138a <+99>: leave
0x6df8138b <+100>: ret
End of assembler dump.
在这里,该功能也被称为“MouseClick”。
我可能会走错路,但我不明白为什么 gdb 和 nm 都显示“干净”的函数名称,但 Excel 不能与我认为的任何一个一起工作。我确实让 dll 与我的 VBA 子一起工作了一段时间,但我更改了文档,现在它无法正常工作。
以前做过这件事的人会善意地为我指出这一切的正确方向吗?我应该在 Excel 中给函数起什么名字?为什么 nm 显示未损坏的函数名称?我是否以正确的方式去做这件事?
提前感谢大家!