通过vtable界面使用Excel 我正在学习C++的COM编程。据我所知,在双接口的客户端,您有两种选择: 获取IDispatch接口,使用GetIDsOfNames查询DISPIDs,并使用Invoke访问方法和属性 在项目中包括带有接口定义的.h头文件和带有MIDL创建的GUID的.c源文件,并直接通过vtable调用函数,编译器从.h文件中知道vtable 我想从C++程序中创建一个相当复杂的Excel工作簿(我坚持使用C++代替C语言或其他任何东西)。使用1。这样我就可以写一个运行正常的程序了。但是,我有两个问题:(A)由于要调用的调用,代码非常笨拙,(B)它非常快,但我希望它更快

通过vtable界面使用Excel 我正在学习C++的COM编程。据我所知,在双接口的客户端,您有两种选择: 获取IDispatch接口,使用GetIDsOfNames查询DISPIDs,并使用Invoke访问方法和属性 在项目中包括带有接口定义的.h头文件和带有MIDL创建的GUID的.c源文件,并直接通过vtable调用函数,编译器从.h文件中知道vtable 我想从C++程序中创建一个相当复杂的Excel工作簿(我坚持使用C++代替C语言或其他任何东西)。使用1。这样我就可以写一个运行正常的程序了。但是,我有两个问题:(A)由于要调用的调用,代码非常笨拙,(B)它非常快,但我希望它更快,c++,excel,com,vtable,C++,Excel,Com,Vtable,所以我想试试2。对。我只是缺少了.h和.c文件,因为与我阅读的书中的示例不同,这些文件不是由另一个示例项目创建的,而是由Microsoft创建的 我的问题是: 我在哪里可以找到这些文件 我希望从方法2中获得多大的性能改进。与方法1相比 我建议不要这样做。而且,我有我的理由 对于简单的事情,只需旋转excel.exe并将数据从一个进程封送到另一个进程就会占用大部分时间。这些东西比使用C++接口所能获得的数量大。 然而,最大的原因是:有时Office无法在客户机上正确安装或注册…无论出于何种原因。

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

我的问题是:

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

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

      对于简单的事情,只需旋转excel.exe并将数据从一个进程封送到另一个进程就会占用大部分时间。这些东西比使用C++接口所能获得的数量大。

      然而,最大的原因是:有时Office无法在客户机上正确安装或注册…无论出于何种原因。有时会发生的情况是接口没有正确注册。如果接口注册不正确,那么您将竭尽全力试图找出程序失败的原因。最终你可能会明白的。然后,您唯一的办法是告诉客户重新安装Office并希望其正确安装,或者创建一个.reg文件,如果客户具有管理员权限并且您知道缺少哪些接口,则让客户应用reg文件来修复这些接口

      如果使用IDispatch,接口是否丢失并不重要。这是我用文字学来的。你已经让它工作了

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

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

      没有.h和.c文件,但有一个类型库(捆绑到Excel.exe中)。请看,使用C API XLL接口比使用COM接口更好/更快。