C # COM Interop: Как перевести инструкции из C ++? - PullRequest
2 голосов
/ 24 августа 2010

Я пытаюсь перевести инструкции 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.Это показывает, а?=) * * Один тысяча двадцать-шесть

1 Ответ

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

Самый простой способ сделать com-взаимодействие - это позволить Visual Studio создать взаимодействие для вас - я использовал его со многими различными com-объектами, и у меня никогда не было проблем с ним.Для начала, в вашем проекте C # выберите Добавить ссылку и выберите вкладку COM, найдите объект производителя камеры в списке, и все готово.Теперь вы можете использовать com-объекты, как если бы они были родными C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...