2012-07-13 82 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