0

C# の GMFBridge directshow フィルターを使用していますが、インポート ライブラリが 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 によって) 次のように変換されます。

[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 メソッドの HRESULT 戻り値を保持します。このライブラリの動作が異なるのはなぜですか? 他の動作を強制することは可能ですか?

ありがとう、アンディ

4

1 に答える 1

0

.NET の規則では[out, retval]、C# の戻り値に変換し、失敗した HRESULT をCOMExceptionオブジェクトに変換し、HRESULT をErrorCodeプロパティに含めます。エラーのない HRESULT を表示したい場合は、行き詰まっていると思います。

変換後に生の HRESULT を生成したメソッドの IDL 宣言を確認したいと思います。質問の例は、通常見られると予想されるものです。

于 2010-08-24T09:44:56.710 に答える