簡體   English   中英

C#COM Interop:如何從C ++轉換指令?

[英]C# COM Interop: How to translate instructions from C++?

我正在嘗試將我的相機制造商為C ++提供的COM Interop指令轉換為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);

但轉換后控件為null。

抱歉,如果我不確定,我不知道我在這里做什么。 這是我第一次使用COM Interop。 它表明,嗯? =)

進行com互操作的最簡單方法是讓Visual Studio為您創建互操作-我將它與許多不同的com對象一起使用,並且從未遇到過任何問題。 首先,在C#項目中選擇“添加引用”,然后選擇“ COM”選項卡,在列表中找到相機制造商的對象,然后就應該完成了。 現在,您可以像使用原生C#一樣使用com對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM