如何使用c#将未知参数传递给COM接口



我有一个像这样定义的COM接口

interface Client : IUnknown
{
    [id(1)] HRESULT GetSomething
    (
        enum SomeID someID,
        [out] IUnknown  **pUnknown
    );
};

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

你没有传递任何东西,它返回一个接口指针。IUnknown是一个不透明的接口,由所有COM接口实现。在c#中,它将是一个object类型的对象,托管版本的"可以是任何东西"。基本代码是这样的:

object retval;
client.GetSomething(SomeID.Magic, out retval);
然后由您决定将返回的对象强制转换为实际的接口类型,可能基于Magic。你的问题根本没有暗示它可能是什么,你必须阅读COM组件的文档才能有一个想法。

假设您不知道关于对象的任何,您可能会使用IntPtr来表示IUnknown,然后使用Marshal为它获取RCW。GetUniqueObjectForIUnknown:

// Get some object
IntPtr ptrObj = IntPtr.Zero;

Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);

相关内容

  • 没有找到相关文章

最新更新