2009-09-23 58 views
2

但是,COM如何支持他們? C++是否支持它們?假定所有的COM代碼都是用C++編寫的,是不是無知?或者COM只是一種方法,是構建應用程序的一種方式?COM如何支持可選參數?

我很好奇。我最近一直在用C#編寫大量COM自動化,而這個問題剛剛發生在我身上。

回答

3

這個鏈接可以幫助解答有關可選參數的問題(答案是「是」,你可以做他們): http://msdn.microsoft.com/en-us/library/f25e2b6b%28VS.80%29.aspx

COM是二進制規範。您可以在技術上用任何語言創建一個com對象(服務器)。微軟語言顯然(邪惡?)比其他人更容易,因爲他們寫了規範。直接創建一個com服務器是可能的......技術上。實際上這是一項艱鉅的任務。

最好的問候, 不要

3

如果你用C/C++(或舊版本的Delphi)COM和自動化工作,你應該使用變數要進行可選的參數。此外,COM不支持C++樣式中定義的可選參數。這就是說,對於在調用另一個對象時要提供的那些VARIANT,並且您想要指定可選參數(例如,通過自動化與MS Word或Excel交談時),您需要用這些VARIANTS初始化這些VARIANTS鍵入VT_ERROR並將scode字段設置爲DISP_E_PARAMNOTFOUND。

當從其他能夠省略參數的對象(VBScript,JScript)接收調用時,需要檢查所有VARIANT的類型已設置爲VT_ERROR且scode字段爲DISP_E_PARAMNOTFOUND的情況。

.NET的等價物是將映射到COM可選參數的參數設置爲Type.Missing。以下鏈接可能有助於查看故事的兩面。

.NET4Office : Type.Missing, C#, and Word (MSDN Blog)

所有這一切都植根於舊版本的VB(6和以前)的處理方式可選參數。這是一個非常簡潔的MS Support KB鏈接。

How to pass optional parameters when you call a function from C++ (kb238981)

爲了解決您的其他問題,這是不正確的假設,大部分COM對象都是用C++編寫,如COM嚴格大約在衆所周知的方式宣佈接口和接口的佈局。只要他們遵守和遵守所支持的接口的佈局,使用什麼語言或工具來製作COM對象並不重要。

最後,你對COM是一種方法論是正確的 - 不是在爲任何特定應用程序設置架構的意義上,而是爲了強化定義可能組成應用程序或可以使用的互連組件到其他應用程序。