如何在c#中实例化一个IDispatchEx ?

本文关键字:一个 IDispatchEx 实例化 | 更新日期: 2023-09-27 17:54:02

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

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

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

上面的例子不起作用。是否有任何方法来实例化COM对象,因为你会从活动脚本转换到IDispatchEx接口?

感谢所有的帮助/建议!

如何在c#中实例化一个IDispatchEx ?

操作失败,原因是在COM上调用QueryInterface组件,用于具有IID的接口"{a6ef9860 c720 - 11 d0 - 9337 - 00 - a0c90dcaa9}"失败,由于以下错误(异常from HRESULT: 0x80004002(E_NOINTERFACE)) .

您得到的异常消息非常清楚,脚本。FileSystemObject根本不实现IDispatchEx接口。只有IDispatch。

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

你完成了,你不能强迫COM协类实现一个接口。我不希望有很多COM类实现它,IDispatchEx是相当模糊的。

如果你想在c#(源代码)中使用它,似乎你需要自己定义这个接口

这个线程可能是相关的-似乎有人已经找到了一个现有的IDispatchEx实现来使用。