gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:01:19 25 4
gpt4 key购买 nike

大家下午好

我今天正在玩弄 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 sub 一起工作了一段时间,但我更改了文档,现在它不起作用。

以前做过这件事的人会友善地为我指出正确的方向吗?我应该如何命名该函数在 Excel 中?为什么 nm 显示的函数名称没有被破坏?我的做法是否正确?

提前感谢大家!

最佳答案

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

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

答案是特定于 gcc 的,这就是你似乎使用的。

关于c++ - Excel 不会从 C++ DLL 加载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403981/

25 4 0
文章推荐: swift - 不同宽度的 UIPageViewController 页面
文章推荐: c++ - 使用 SDL_FillRect 创建矩形
文章推荐: javascript - 在fabric.js (Ubuntu) 中使用比例时文本扭曲
文章推荐: html - 如何仅使用 CSS 设置