Как получить результаты HRESULT из библиотек, импортированных в c # с помощью tlbimp.exe? - PullRequest
0 голосов
/ 24 августа 2010

Я использую фильтр направленного показа GMFBridge из 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) в:

[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, которые я импортировал, переводят возвращаемые значения в качестве параметров и сохраняют возврат HRESULTзначение оригинального метода COM.Почему эта библиотека ведет себя по-другому?Можно ли заставить другое поведение?

Спасибо, Энди

1 Ответ

0 голосов
/ 24 августа 2010

Соглашение .NET заключается в том, чтобы превратить [out, retval] в возвращаемое значение C # и превратить ошибочные HRESULT в объекты COMException, а HRESULT в свойстве ErrorCode. Я думаю, что вы застряли, если хотите увидеть HRESULT без ошибок.

Мне было бы интересно увидеть объявления IDL о методах, которые генерировали необработанные HRESULT после перевода - пример в вашем вопросе - это то, что я ожидал бы увидеть нормально.

...