[英]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.