通过虚表接口使用Excel

Using Excel through vtable interface

本文关键字:Excel 接口 虚表      更新时间:2023-10-16

我正在通过c++学习COM编程。据我所知,在双接口的客户端,您有两个选择:

  1. 获取IDispatch接口,使用GetIDsOfNames查询disids,并使用Invoke访问方法和属性。
  2. 在项目中包含带有接口定义的。h头文件和带有由MIDL创建的guid的。c源文件,并直接通过vtable调用函数,vtable是编译器从。h文件中知道的。

我想从c++程序创建一个相当复杂的Excel工作簿(我坚持使用c++而不是c#或其他任何东西)。使用1。这样我就能写出一个正确运行的程序。然而,我有两个问题:(A)代码是相当笨拙的,因为调用调用,(B)它是相当快,但我希望它更快。

所以我想试试2。道路我只是缺少。h和。c文件,因为与我读过的书中的示例不同,这些文件不是由另一个示例项目创建的,而是由Microsoft创建的。

我的问题是:

  • 我在哪里可以找到这些文件?
  • 我希望从方法2中得到多少性能改进?与方法1相比。

我建议不要这样做。而且,我有我的理由……

对于简单的事情,仅仅运行excel.exe并将数据从一个进程封送到另一个进程就占用了大部分时间。这些东西比使用c++接口可能获得的好处要大得多。

然而,最大的原因是:有时Office不能在客户端机器上正确安装或注册…不管出于什么原因。有时会发生接口没有正确注册的情况。如果接口没有正确注册,您将会绞尽脑汁地想弄清楚程序失败的原因。最终你会明白的。然后你唯一的办法就是告诉你的客户重新安装Office,希望它能正确安装,或者创建一个.reg文件,让客户应用reg文件来修复接口,如果他有管理员权限,你知道哪些是丢失的接口。

如果你使用IDispatch,接口是否丢失并不重要。我在使用Word的过程中吸取了惨痛的教训。你已经让它工作了…

如果你坚持的话,你可以试试:

#import "progid:Excel.Sheet" // plus a bunch of other options like rename() etc...