【发布时间】:2017-04-01 05:45:53
【问题描述】:
我正在通过 C++ 学习 COM 编程。据我了解,在双接口的客户端,您有两种选择:
- 获取 IDispatch 接口,使用 GetIDsOfNames 查询 DISPID,并使用 Invoke 访问方法和属性。
- 在您的项目中包含带有接口定义的 .h 头文件和带有由 MIDL 创建的 GUID 的 .c 源文件,并直接通过 vtable 调用函数,这对于 .h 文件中的编译器来说是众所周知的。
我想从 C++ 程序创建一个相当复杂的 Excel 工作簿(我坚持使用 C++ 而不是 C# 或其他任何东西)。使用 1. 方法,我能够编写一个正确运行的程序。但是,我有两个问题:(A)由于调用 Invoke,代码非常笨拙,(B)它非常快,但我希望它更快。
所以我想尝试 2. 方式。我只是缺少 .h 和 .c 文件,因为与我阅读的书中的示例不同,这些文件不是由另一个示例项目创建的,而是由 Microsoft 创建的。
我的问题是:
- 在哪里可以找到这些文件?
- 与方法 1 相比,我希望方法 2 的性能提升多少?
【问题讨论】:
-
没有 .h 和 .c 文件,但有一个类型库(捆绑到 Excel.exe 中)。见
#import directive -
使用 C API XLL 接口而不是 COM 会更好/更快。 msdn.microsoft.com/en-us/library/office/bb687883.aspx