2012-07-13 37 views
1

对不起,但我不得不再次问。我正在寻找几个星期和一个月的解决方案。 问题是,已经实现了一个COM接口的抛出只通过调用几个方法一个InvalidCast异常E_NOINTERFACE,它告诉我,我必须实现IUnknown。 那么我该怎么做?C#Com E_NOINTERFACE查询接口

我试过几乎所有... 目前,我有这样的事情

[ComImport, 
Guid("279AFA85-4981-11CE-A521-0020AF0BE560"), 
InterfaceType(ComInterfaceType.InterfaceIsIUnknown), 
System.Security.SuppressUnmanagedCodeSecurity] 

public interface IDirectSoundBuffer : IUnknown 
{ 

...

[ComImport] 
[Guid("00000000-0000-0000-C000-000000000046")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IUnknown 
{ 
    void QueryInterface([In] ref Guid giid, [Out, MarshalAs(UnmanagedType.IUnknown, IidParameterIndex = 0)] out object ppvObject); 
    [PreserveSig] 
    uint AddRef(); 
    [PreserveSig] 
    uint Release(); 
} 

我真不知道有什么我可以尝试更多。我有许多不同的论坛话题讨论这一点,但noboboy知道什么:((请帮我

+0

你叫所有从IUnknown接口的方法呢? – Botonomous 2012-07-13 21:36:02

+0

你也可以说实现了这个接口的类? – dkackman 2012-07-14 14:00:53

+0

我也想落实的QueryInterface我所以我可以为它设置日志记录 - 是否让它运行? – 2012-08-03 20:10:53

回答

0

这只是一个猜测(因为它已经一段时间):

不要声明IUnkown和继承你的界面从它在你的C#互操作码,Com Callable Wrapper将执行它。

+0

我也试过了,结果相同。 – 2012-07-13 22:14:06

+1

好吧,我已经明白了。如果我运行它在MTAThread它的作品,但在STAThread不 – 2012-07-14 22:36:01