【问题标题】:Using Excel through vtable interface通过 vtable 界面使用 Excel
【发布时间】:2017-04-01 05:45:53
【问题描述】:

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

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

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

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

我的问题是:

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

【问题讨论】:

标签: c++ excel com vtable


【解决方案1】:

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

对于简单的事情,只是启动 excel.exe 并将数据从一个进程编组到另一个进程会占用大部分时间。这些东西比使用 C++ 接口可能获得的要大得多。

但是,主要原因是:有时 Office 无法在客户端计算机上正确安装或注册...无论出于何种原因。有时会发生接口未正确注册的情况。如果接口未正确注册,您将费尽心思试图找出程序失败的原因。最终你可能会弄清楚。那么你唯一的办法就是告诉你的客户重新安装 Office 并希望它正确安装,或者创建一个 .reg 文件并让客户应用 reg 文件来修复接口,如果他有管理员权限并且你知道哪些是缺少接口。

如果您使用 IDispatch,则接口是否丢失无关紧要。我已经通过 Word 艰难地学会了这一点。你已经让它工作了......

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2016-06-17
    相关资源
    最近更新 更多