Excel调用C++程序的函数

Excel calling a function of a C++ program

本文关键字:函数 程序 C++ 调用 Excel      更新时间:2023-10-16
  1. 我有一个C++程序,program.exe,它有一个函数doSomething()
  2. 但是,我不需要在program.exe中有一个调用doSomething()的逻辑,而是需要excel作为前端,根据特定单元格中的一些变化来决定何时调用这个doSometing()
  3. XML/CSV IO已过时,因为决策是实时的、低延迟的
  4. 那么,我该如何将excel与program.exe接口,以便excel调用doSomething()

我真的希望有人能给我指明方向。我使用QT 4.8.5来开发c++项目。我一直在读,但COM模型对我来说是很新的。我写COM模型吗?DLL?

COM/DLL如何"知道"excel调用了它,从而提供某种"确认",进而调用program.exe中的doSomething()?

一种方法是创建一个包含函数doSomething的DLL,并从Excel中调用它,如MSDN文章中所述:如何:访问Excel 中的DLL

您还可以从应用程序中生成COM组件。这将更容易从Excel访问(尤其是当涉及到参数类型时),但如果你从未这样做过(并且你只需要调用一个函数),最好先尝试"纯DLL"方法。

您可以从excel中调用DLL函数。这样,你就有两种可能性:

  • 将程序转换为DLL
  • 如果这不可能,请创建一个与程序通信的DLL(通过一些IPC机制,例如套接字)

有关详细信息,请搜索Web或再次询问:-)

COM/DLL如何"知道"excel调用了它,从而提供某种"确认",然后调用program.exe 中的doSomething()

Excel不调用DLL,而是调用DLL中的函数(通过从VBA宏或电子表格公式调用它)。当这个函数执行时,它一定是被某种东西调用的(可能是Excel,除非你从其他地方调用它),所以它有点"知道"它被调用了。它可以通过其回报值向excel提供反馈。

PE文件(.exe)不导出函数。但是,您可以使用参数从excel执行程序并使用结果(将程序的stdout读取到excel中)。

您可以使用宏来执行程序。然而,我拒绝编写Visual Basic(或阅读它),因此不幸的是,我无法提供任何示例代码。如果你四处搜索一下,它应该很容易找到。

anyw。。我最终找到了一个我能理解的例子http://qt-project.org/doc/qt-4.8/activeqt-comapp.html

最终的VBA代码可以很容易地合并到Excel VBA中,QT提供了一个?容易的在我现有的代码上编写COM包装器的方法