如何在 C# 中实例化 IDispatchEx?

发布于 2024-11-04 09:52:45 字数 671 浏览 3 评论 0原文

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

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

我的 IDispatchEx 与此网站上的相同 (不是我的网站),除了 GetNextDispID 和GetMemberName 返回一个 int (我希望将其用于 HRESULT,如所述 MSDN)。

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

感谢您的任何和所有帮助/建议!

this is my first SO question!
I would like to instantiate a COM object and cast it to IDispatchEx so that I can enumerate its members. Here is an example:

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

My IDispatchEx is identical to the one on this website (not my website), except that GetNextDispID and GetMemberName return an int (which I wish to use for HRESULT as described on MSDN).

The example above does not work. Is there any way to instantiate COM objects as you would from Active Scripting cast to the IDispatchEx interface?

Thanks for any and all help/suggestions!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

走走停停 2024-11-11 09:52:45

此操作失败,因为
COM 上的 QueryInterface 调用
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 组件类实现接口。我不希望有很多 COM 类来实现它,IDispatchEx 相当晦涩难懂。它适合 JScript 模式。

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)).

The exception message you get is as clear as a bell, the Scripting.FileSystemObject simply doesn't implement the IDispatchEx interface. Only IDispatch. This works fine:

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

You're done, you cannot force a COM coclass to implement an interface. I would not expect very many COM classes to implement it, IDispatchEx is pretty obscure. It fits the JScript mold.

夏了南城 2024-11-11 09:52:45

如果您想在 C# 中使用它,您似乎需要自己定义此接口(源代码)

此帖子可能相关 - 似乎有人已经找到了 IDispatchEx 的现有实现可供使用。

It seems that you will need to define this interface yourself if you wish to use it in C# (source)

This thread may be relevant - it seems that someone has found an existing implementation of IDispatchEx to use.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文