2012-07-09 83 views
0

大家下午好。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顯示的函數名稱沒有被破壞?我甚至會以正確的方式去做這件事嗎?

感謝所有提前!

回答

1

有人通過這一切就已經和更新了自己的問題,包括解決方案:

Compile a DLL in C/C++, then call it from another program

答案是特定的GCC,這是你似乎有什麼用。

+0

謝謝!你指出我正確的方向。我錯過了一個編譯器語句。對於有同樣問題的任何其他人,還可以看到... [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