通过COM Interop通过引用传递COM接口

时间:2017-06-29 19:00:11

标签: c# com-interop

我在C#中实现了以下COM对象

[ComVisible(true), Guid("AAAABBBB-CCCC-DDDD-EEEE-FFFFAAAABBBB")]
class Foo : IFoo, IBar
{
   // Implementation
}

我将以下COM接口放入另一个用C ++实现的COM对象中。

[Guid("FFFFEEEE-DDDD-CCCC-BBBB-AAAAFFFFEEEE")]
[TypeLibType(4160)]
public interface IAcceptFoo2 : IAcceptFoo
{
    [DispId(1)]
    void AcceptFoo(ref IFoo foo, IOther other, bool Check);
     // Additional methods
}

我从C#调用这个接口:

Foo fooConcrete = new Foo();
IFoo fooInterface = fooConcrete as IFoo;
acceptFooConcrete.AcceptFoo(ref fooInterface, other, check);

我可以调试本机代码,我看到foo参数是一个有效指针(但nullptr有一个_vfptr),但该对象执行以下{{1} }}

QueryInterface

IBarPtr spBar; HRESULT hr = foo->QueryInterface(IID_IBar, reinterpret_cast<void**>(&spBar)); 调用QueryInterface接口也在IBar上实施,生成Foo

  

抛出异常:读取访问冲突。

我很好奇我是否错过了某种类型的Marshaling,因为Access Exception参数传递为IFoo

0 个答案:

没有答案