大家下午好。Excel不會從C++ DLL加載函數
我今天在玩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調用鼠標點擊功能的功能...
$ 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 <[email protected]>
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.
在這裏,也該功能爲「鼠標點擊」簡稱。
我可能會這樣想,但我不明白爲什麼gdb和nm都顯示一個「乾淨」的函數名稱,但Excel不會與我認爲的任何一個是。我確實讓dll與我的VBA子工作了一段時間,但我更改了文檔,現在它無法工作。
以前做過這個的人會不會善意地指出我對這一切的正確方向?我應該怎樣在Excel中命名該函數?爲什麼nm顯示的函數名稱沒有被破壞?我甚至會以正確的方式去做這件事嗎?
感謝所有提前!
謝謝!你指出我正確的方向。我錯過了一個編譯器語句。對於有同樣問題的任何其他人,還可以看到... [MinGW VB DLL](http://oldwiki.mingw.org/index.php/VB-MinGW-DLL)和[mingw sampleDLL](http:///www.mingw.org/wiki/sampleDLL)。 **示例語句:**'g ++ myDLL.cpp -o myDLL.dll -Wl, - add-stdcall-alias -mdll' – blakek 2012-07-16 18:15:33