如何在C#中实例化IDispatchEx?

时间:2011-04-29 15:07:59

标签: c# com activex createinstance

这是我的第一个问题! 我想实例化一个COM对象并将其强制转换为IDispatchEx,以便我可以枚举其成员。这是一个例子:

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

我的IDispatchEx与on this website(不是我的网站)相同,只是GetNextDispID和GetMemberName返回一个int(我希望用于HRESULT,如on MSDN所述)。

上面的例子不起作用。有没有办法实例化COM对象,就像从Active Scripting转换为IDispatchEx接口一样?

感谢您提供任何帮助/建议!

2 个答案:

答案 0 :(得分:5)

  

此操作失败,因为   QueryInterface调用COM   与IID接口的组件   '{A6EF9860-C720-11D0-9337-00A0C90DCAA9}'   由于以下错误而失败:否   支持这样的接口(例外   来自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模具。

答案 1 :(得分:0)

如果您希望在C#(source)中使用它,您似乎需要自己定义此界面

This thread可能是相关的 - 似乎有人找到了IDispatchEx的现有实现。