2
  1. 我有一个 C++ 程序 program.exe 有一个函数 doSomething()
  2. 但是,我不需要在 program.exe 中有一个逻辑来调用 doSomething(),而是需要 excel 作为前端来决定何时调用这个 doSomething() - 基于特定单元格中的一些变化
  3. XML/CSV IO 已淘汰,因为决策是实时的、低延迟的
  4. 那么我该如何将 excel 与 program.exe 连接起来,以便让 excel 调用 doSomething()

我确实希望有人能给我指明一个方向。我使用 QT 4.8.5 开发 c++ 项目。我一直在阅读,但 COM 模型对我来说很新。我要编写 COM 模型吗?动态链接库?

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

4

4 回答 4

1

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

您还可以从您的应用程序中创建一个 COM 组件。这会更容易从 Excel 访问(尤其是在参数类型方面),但如果您从未这样做过(并且您只需要调用一个函数),最好尝试“纯 DLL “——先接近。

于 2013-08-30T18:38:29.720 回答
0

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

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

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

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

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

于 2013-08-30T18:37:31.257 回答
0

无论如何..我最终找到了一个我可以理解的例子 http://qt-project.org/doc/qt-4.8/activeqt-comapp.html

最终的 VBA 代码可以很容易地合并到 Excel-vba 中,而 QT 提供了一个“简单”的功能。在我现有的代码上编写 COM 包装器的方法

于 2013-09-01T06:48:58.473 回答
0

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

您可以使用宏来执行程序。但是,我拒绝编写 Visual Basic(或为此而阅读),所以很遗憾我无法提供任何示例代码。如果您搜索一下,它应该很容易获得。

于 2013-08-30T18:56:56.577 回答