2016-11-17 38 views
0

我正在通過C++學習COM編程。據我瞭解,在雙接口的客戶端,你有兩個選擇:通過vtable接口使用Excel

  1. 獲取IDispatch接口,查詢的DISPID用的GetIDsOfNames,並使用調用訪問方法和屬性。
  2. 在您的項目中包含帶有接口定義的.h頭文件和帶MIDL創建的GUID的.c源文件,並直接通過vtable調用這些函數,vtable是編譯器從.h文件中已知的。

我想從C++程序創建一個相當複雜的Excel工作簿(我堅持使用C++而不是C#或其他)。使用這種方式,我能夠編寫一個正確運行的程序。但是,我有兩個問題:(A)由於調用調用,代碼非常笨拙,(B)速度很快,但我希望它更快。

所以我想試試2.方式。我只是缺少.h和.c文件,因爲與我讀的書中的示例不同,這些文件不是由另一個示例項目創建的,而是由Microsoft創建的。

我的問題是:

  • 我在哪裏可以找到這些文件?
  • 與方式1相比,我可以從方式2中獲得多少性能提升。
+0

有沒有h和.c文件,但有一個類型庫(捆綁到EXCEL.EXE)。請參閱['#import directive'](https://msdn.microsoft.com/en-us/library/8etzzkb6.aspx) –

+0

使用C API XLL接口而不是COM會更好/更快。 https://msdn.microsoft.com/en-us/library/office/bb687883.aspx –

回答

0

我建議不要這樣做。而且,我有我的理由......

對於簡單的事情,只需旋轉excel.exe並將數據從一個進程轉移到另一個進程就會耗盡大部分時間。這些東西比你在使用C++接口時可能獲得的更多。

但是,最大的原因是這樣的:有時Office不會在客戶端機器上正確安裝或註冊......無論出於何種原因。有時會發生什麼情況是接口無法正確註冊。如果接口沒有正確註冊,那麼您將會試圖弄清楚爲什麼程序失敗。最終你可能會弄清楚。那麼你唯一的辦法是告訴你的客戶重新安裝Office,並希望它正確安裝,或者創建一個.reg文件,並讓客戶應用reg文件修復接口,如果他有管理員權限,並且知道哪些是缺少接口。

如果使用IDispatch,接口是否丟失並不重要。我用Word很難學會這一點。你已經擁有它的工作...

如果你堅持,那麼你可以嘗試:

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