繁体   English   中英

通过vtable界面使用Excel

[英]Using Excel through vtable interface

我正在通过C ++学习COM编程。 据我了解,在双重接口的客户端,您有两种选择:

  1. 获取IDispatch接口,使用GetIDsOfNames查询DISPID,并使用Invoke访问方法和属性。
  2. 在项目中包括带有接口定义的.h头文件和带有MIDL创建的GUID的.c源文件,并直接通过vtable调用函数,vtable对于.h文件来说是众所周知的。

我想通过C ++程序创建一个非常复杂的Excel工作簿(我坚持使用C ++代替C#或其他任何东西)。 使用1.方法,我能够编写一个可以正常运行的程序。 但是,我有两个问题:(A)由于调用了Invoke,所以代码很笨拙;(B)相当快,但是我希望它更快。

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

我的问题是:

  • 在哪里可以找到这些文件?
  • 与方法1相比,我希望方法2的性能提高多少?

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

对于简单的事情,仅将excel.exe分解并将数据从一个进程编组到另一个进程就消耗了大多数时间。 这些事情比使用C ++接口所获得的结果要大得多。

但是,最大的原因是:有时出于某些原因,有时无法在客户端计算机上正确安装或注册Office。 有时会发生接口未正确注册的情况。 如果接口未正确注册,则将使您费劲,以找出程序失败的原因。 最终,您可能会发现。 然后,唯一的办法就是告诉客户重新安装Office并希望它能够正确安装,或者创建一个.reg文件,并让客户应用reg文件来修复接口(如果他具有管理员特权,并且您知道哪个是Windows XP的)。缺少接口。

如果使用IDispatch,则缺少接口都没有关系。 我已经用Word学会了这一困难的方法。 您已经可以使用...

如果您坚持,则可以尝试:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM