首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用IUnknown将C#参数传递给COM接口?

如何使用IUnknown将C#参数传递给COM接口?
EN

Stack Overflow用户
提问于 2014-05-12 17:10:51
回答 2查看 1.2K关注 0票数 1

我有一个如下定义的COM接口

代码语言:javascript
复制
interface Client : IUnknown
{
    [id(1)] HRESULT GetSomething
    (
        enum SomeID someID,
        [out] IUnknown  **pUnknown
    );
};

如何使用IUnknown传递C#对象?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-13 00:03:53

如果不传递任何内容,就会返回接口指针。作为一个不透明的接口,IUnknown由所有COM接口实现。在C#中,它将是一个对象类型的对象,托管版本的“可以是任何东西”。基本代码如下所示:

代码语言:javascript
复制
object retval;
client.GetSomething(SomeID.Magic, out retval);

然后由您将返回的对象转换为实际的接口类型,可能是基于魔术。您的问题完全没有提示它可能是什么,您必须阅读COM组件的文档才能有一个想法。

票数 4
EN

Stack Overflow用户

发布于 2014-05-12 23:31:59

假设您对对象一无所知,您可能会使用IntPtr来表示IUnknown,然后使用Marshal.GetUniqueObjectForIUnknown为其获取RCW

代码语言:javascript
复制
// Get some object

IntPtr ptrObj = IntPtr.Zero;


Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23614970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档