2010-08-24 19 views
0

我正在使用來自c#的GMFBridge directshow過濾器,導入庫似乎放棄HRESULT。即如何從使用tlbimp.exe導入到C#的庫中獲取HRESULT返回值?

[id(5), helpstring("Create render filters in empty render graph")] 
HRESULT CreateRenderGraph(
    [in] IUnknown* pSourceGraphSinkFilter, 
    [in] IUnknown* pRenderGraph, 
    [out, retval] IUnknown** pRenderGraphSourceFilter); 

[id(6), helpstring("Connect two graphs")] 
HRESULT BridgeGraphs(
    [in] IUnknown* pSourceGraphSinkFilter, 
    [in] IUnknown* pRenderGraphSourceFilter); 

翻譯(由MIDL.EXE和tlbimp.exe是)成:我已經導入爲出參數轉換返回的值,並保留原始的HRESULT返回值

[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(5)] 
object CreateRenderGraph([In, MarshalAs(UnmanagedType.IUnknown)] object pSourceGraphSinkFilter, [In, MarshalAs(UnmanagedType.IUnknown)] object pRenderGraph); 

[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(6)] 
void BridgeGraphs([In, MarshalAs(UnmanagedType.IUnknown)] object pSourceGraphSinkFilter, [In, MarshalAs(UnmanagedType.IUnknown)] object pRenderGraphSourceFilter); 

其他COM庫COM方法。爲什麼這個庫的行爲有所不同?是否有可能強迫其他行爲?

感謝, 安迪

回答

0

的.NET的慣例是把[out, retval]成C#返回值,並把失敗的HRESULT爲COMException對象,隨着ErrorCode財產的HRESULT。我想如果你想看到非錯誤的HRESULT,你就會陷入困境。

我希望看到翻譯後生成原始HRESULT的方法的IDL聲明 - 您的問題中的例子是我期望通常會看到的。

+0

我明白了。沒關係,如果沒有機會我會錯過一個錯誤。其他互操作庫由第三方提供,所以我猜它們必須是手動創建的。 – 2010-08-24 10:05:26

+0

對,你不需要手動檢查你的HRESULT – 2010-08-24 10:17:50

相關問題