簡體   English   中英

在COM接口中訪問子對象

[英]Access sub object in COM interface

我想訪問COM對象的子對象。 在我的示例中,我使用CANoe COM Server。

在我的程序中,我創建了一個CANoe應用程序的CAN接口。 到目前為止,這是我的代碼摘錄,它完全符合我的要求:

HRESULT result;

//prepare for COM handling...
result = CoInitialize(NULL);

//get CLSID of CANoe...
result = CLSIDFromProgID(L"CANoe.Application", &clsid);


if(SUCCEEDED(result))
{
    //connect to COM interface of CANoe...
    result = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, IID_IApplication, (void**) &pIApp);

    if(SUCCEEDED(result))

    {
        qDebug() << "COM connection established";
    }
    else
    {
        qDebug() << "COM connection error";
    }
}
else
{
    qDebug() << "Error: CLSID";
}

現在,我想訪問COM服務器的子對象。 例如測量對象。 我嘗試使用方法pIApp->get_UI()

IDispatch* pIDis;
IMeasurement* pIMeasurement;

result = pIApp->get_UI(&pIDis);

pIMeasurement = (IMeasurement*) pIDis;

指向COM對象的指針必須是IMeasurement類型的指針,因此我可以使用頭文件中定義的所有方法。 但是方法get_UI僅支持IDispatch類型的指針。 我試圖將指針從IDispatch類型轉換為IMeasurement。 但是程序在運行時崩潰。

我還嘗試直接創建一個到子對象的新接口:

    result = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, IID_IMeasurement, (void**) &pIMeasurement);

但是,在此嘗試變量結果的過程中,保存了一個錯誤,並且我無法訪問子對象Measurement的方法。

我的錯誤在哪里?如何訪問子對象?

感謝您提供所有答案和提示!

感謝@ WhozCraig,@ Hans Passant和@Eric Brown提供的注釋提示。

我可以使用以下代碼解決我的問題:

 IDispatch* pIDispatch;

 //get pointer pIDispatch to Measurement object of CANoe...
 result = pIApp->get_Measurement(&pIDispatch);

 if(SUCCEEDED(result))
 {
    //pointer pIDispatch to pIMeasurement...
    result = pIDispatch->QueryInterface(IID_IMeasurement, (void**) &pIMeasurement);

    if(SUCCEEDED(result))
    {
       pIDispatch->Release();

       //work with connection here...

       pIMeasurement->Release();

    }

 }

暫無
暫無

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

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