Я пытаюсь перевести инструкции COM Interop, данные производителем моей камеры для C ++, в C #.
Они пишут:
Для получения интерфейса вы используете обычный COMфункции, чтобы запросить конкретный интерфейс, который вам нужен из фильтра захвата.Например:
IBaseFilter* pSourceFilter;
...
CComQIPtr<IManufacturersInterface> pKs( pSourceFilter );
pKs->SetShutterSpeed( ssAuto1 );
Они также дают подпись интерфейса и Guid.Подпись выглядит так:
interface IManufacturersInterface: IUnknown
{
// more stuff
HRESULT SetShutterSpeed( [in] eShutterSpeed lShutter );
// more stuff
}
, которую я перевел на C # как
[ComImport]
[Guid("926ddb16-3c8e-476c-9068-eb4555a99231")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IManufacturersInterface
{
// more stuff
[PreserveSig]
int SetShutterSpeed([In] eShutterSpeed lShutter);
// more stuff
}
Из другого источника Я получил подобную оболочку DirectShow для доступа к камере в первомместо, включая COM-импортированный интерфейс IBaseFilter
.Как бы я теперь перевел первый пример?
Я пытался
IManufacturersInterface control = sourceFilter as IManufacturersInterface; // sourceFilter is declared as IBaseFilter
control.SetShutterSpeed(eShutterSpeed.ssAuto1);
, но после броска контроль нулевой.
Извините, если я расплывчатый, у меня нет реальногоПонять, что я здесь делаю.Это первый раз, когда мне пришлось использовать COM Interop.Это показывает, а?=) * * Один тысяча двадцать-шесть