这是我的第一个问题! 我想实例化一个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接口一样?
感谢您提供任何帮助/建议!
答案 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的现有实现。