首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过vtable接口使用Excel

通过vtable接口使用Excel
EN

Stack Overflow用户
提问于 2016-11-17 15:39:06
回答 1查看 280关注 0票数 0

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

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

我想从C++程序中创建一个相当复杂的(我坚持使用C++而不是C#或其他任何东西)。使用1.方式,我能够编写一个正确运行的程序。但是,我有两个问题:(A)由于调用的调用,代码非常笨拙,(B)它相当快,但我希望它更快。

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

我的问题是:

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

回答 1

Stack Overflow用户

发布于 2016-11-17 20:40:39

我建议不要这么做。我有我的理由..。

对于简单的事情,只是旋转excel.exe和封送数据从一个进程到另一个进程消耗了大部分时间。这些事情比在使用C++接口时可能得到的东西要大得多。

然而,最大的原因是:有时Office没有在客户端machine...for上正确安装或注册,不管是什么原因。有时会发生的情况是,接口没有正确注册。如果界面没有被正确注册,你会试图找出你的程序失败的原因。最终你会想出办法的。然后,您唯一的方法是告诉您的客户重新安装Office并希望它正确安装,或者创建一个.reg文件,让客户应用reg文件修复接口,如果他拥有管理员权限,并且您知道哪些是缺少的接口。

如果您使用IDispatch,那么是否缺少接口并不重要。我从文字中学到了这一点。你已经让它起作用了。

如果你坚持,那么你可以尝试:

代码语言:javascript
复制
#import "progid:Excel.Sheet" // plus a bunch of other options like rename() etc...
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40659048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档