簡體   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