2011-04-29 81 views
1

這是我第一個SO問題! 我想實例化一個COM對象並將其轉換爲IDispatchEx,以便枚舉其成員。這裏有一個例子:如何在C#中實例化IDispatchEx?

 
    Type _COMType = System.Type.GetTypeFromProgID("Scripting.FileSystemObject"); 
    var _COMObject = (IDispatchEx)Activator.CreateInstance(_COMType); 

我IDispatchEx是相同的一個on this website(不是我的網站),但GetNextDispID和GetMemberName返回一個int(我想描述on MSDN用於HRESULT)。

上述示例不起作用。有沒有什麼辦法像從Active Scripting轉換到IDispatchEx接口那樣實例化COM對象?

感謝您的任何和所有幫助/建議!

回答

5

This operation failed because the QueryInterface call on the COM component for the interface with IID '{A6EF9860-C720-11D0-9337-00A0C90DCAA9}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

您得到的異常消息與鈴聲一樣清晰,Scripting.FileSystemObject完全不實現IDispatchEx接口。只有IDispatch。這工作正常:

 Type t = System.Type.GetTypeFromProgID("Scripting.FileSystemObject"); 
     var obj = Activator.CreateInstance(t); 
     var iobj = (stdole.IDispatch)obj; 

你已經完成,你不能強制COM coclass實現一個接口。我不希望很多COM類實現它,IDispatchEx是相當模糊的。它符合JScript模型。

+0

謝謝,漢斯。似乎也無法枚舉使用IDispatch的屬性/方法。我可能不得不以另一種方式去...... – aikeru 2011-05-03 13:48:26

+0

回到這裏 - 我錯了:)完全可以枚舉使用IDispatch的後期綁定COM對象(實現它)。我仍然對此有所瞭解。 – aikeru 2012-06-18 15:46:27

0

看來你需要定義這個接口自己,如果你想在C#(source

This thread可能是相關的使用它 - 它似乎有人發現了一個現有的實現IDispatchEx的使用。