Excel不会从C ++ DLL加载函数

时间:2012-07-09 22:15:10

标签: c++ excel vba dll

下午好,全部。

今天我用Excel& amp; 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 sub工作了一段时间,但我更改了文档,现在它无法正常工作。

之前做过此事的人是否会善意地指出我正确的方向?我应该在Excel中命名该功能?为什么nm显示的函数名称没有被破坏?我是否正确地采取了这种方式?

提前感谢所有人!

1 个答案:

答案 0 :(得分:1)

有人已经完成了所有这些并更新了他的问题以包含解决方案:

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

答案是针对gcc的,这是你似乎使用的。