Excel调用一个C ++程序的function

  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模型? DLL?

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

一种方法是创build一个包含函数doSomething的DLL,并按照以下MSDN文章中的说明从Excel中调用它: 如何:在Excel中访问DLL

你也可以在你的应用程序中创build一个COM组件。 从Excel中访问会更容易一些(尤其是涉及到参数types时),但是如果你从来没有做过(而且你只需要调用一个函数),那么试试“pure-DLL “ – 先做。

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

  • 将您的程序转换成一个DLL。
  • 如果这是不可能的,创build一个DLL与您的程序进行通信(通过一些IPC机制,例如套接字)

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

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

Excel不调用DLL,它调用DLL中的函数(通过从VBAmacros或电子表格公式调用它)。 当这个函数执行的时候,它一定是被某个东西调用的(可能是Excel,除非你从别的地方调用它),所以它“知道”它被调用了。 而且它可以通过它的回报值提供反馈。

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

您可以使用macros来执行该程序。 但是,我拒绝编写Visual Basic(或者为此阅读),所以不幸的是我无法提供任何示例代码。 它应该很容易可用,如果你search一下。

anyw ..我最终find一个例子,我可以理解http://qt-project.org/doc/qt-4.8/activeqt-comapp.html

最后的VBA代码是可以很容易地合并到Excel-vba中,QT提供了一个“简单” 方式写我的现有代码的COM包装