如何在C#中实例化IDispatchEx?

aik*_*eru 1 c# com activex createinstance

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

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

我的IDispatchEx与本网站(不是我的网站)上的相同,只是GetNextDispID和GetMemberName返回一个int(我希望用于MSDN上描述的HRESULT ).

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

感谢您提供的所有帮助/建议!

Han*_*ant 5

此操作失败,因为对IID为"{A6EF9860-C720-11D0-9337-00A0C90DCAA9}"的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(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;
Run Code Online (Sandbox Code Playgroud)

你已经完成了,你不能强制COM coclass来实现一个接口.我不希望有很多COM类来实现它,IDispatchEx非常模糊.它适合JScript模具.