问题:一个支持自动化的接口函数能不能有多个指针类型的输入参数。
com接口函数原型:
HRESULT ee([in] long * aa,[in] long *bb);客户端程序:
if(FAILED(CoInitialize(NULL)))
{
MessageBox("初始化COM组件出现错误!");
return;
}
CLSID clsid;
HRESULT hr;
hr=CLSIDFromProgID(L"yy.xx",&clsid);
if(FAILED(hr))
{
MessageBox("在注册表中读取组件名出现错误!");
CoUninitialize();
return;
}
IDispatch *pDispatch = 0;
hr=CoCreateInstance(clsid,NULL,CLSCTX_SERVER,IID_IDispatch,(void **)&pDispatch);
if(FAILED(hr))
{
MessageBox("create server instance 出现错误!");
CoUninitialize();
return;
}
LPOLESTR lpOleStr=L"ee";
DISPID dispid;
hr=pDispatch->GetIDsOfNames(IID_NULL,&lpOleStr,1,LOCALE_SYSTEM_DEFAULT,&dispid);
if(FAILED(hr))
{
MessageBox("GetIDsOfNames 出现错误!");
CoUninitialize();
return;
}
DISPPARAMS dispparms;
memset(&dispparms,0,sizeof(DISPPARAMS));
dispparms.cArgs=2;
VARIANTARG* pArg=new VARIANTARG[dispparms.cArgs];
dispparms.rgvarg=pArg;
CComVariant vAA,vBB;
vAA.vt=VT_I4;
vBB.vt=VT_I4;
memset(pArg,0,sizeof(VARIANT)*dispparms.cArgs);
dispparms.rgvarg[0].vt=VT_VARIANT|VT_BYREF;
dispparms.rgvarg[0].pvarVal=&vAA;
dispparms.rgvarg[1].vt=VT_VARIANT|VT_BYREF;
dispparms.rgvarg[1].pvarVal=&vBB; hr=pDispatch->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispparms,NULL,0,NULL);
if(FAILED(hr))
{
MessageBox("Invoke error");
CoUninitialize();
return;
}
CoUninitialize();错误出现在 invoke函数上 就是dispparms参数出现错误
即出现在 DISPPARAMS 结构中有谁做过这方面工作的人 请指点指点!
com接口函数原型:
HRESULT ee([in] long * aa,[in] long *bb);客户端程序:
if(FAILED(CoInitialize(NULL)))
{
MessageBox("初始化COM组件出现错误!");
return;
}
CLSID clsid;
HRESULT hr;
hr=CLSIDFromProgID(L"yy.xx",&clsid);
if(FAILED(hr))
{
MessageBox("在注册表中读取组件名出现错误!");
CoUninitialize();
return;
}
IDispatch *pDispatch = 0;
hr=CoCreateInstance(clsid,NULL,CLSCTX_SERVER,IID_IDispatch,(void **)&pDispatch);
if(FAILED(hr))
{
MessageBox("create server instance 出现错误!");
CoUninitialize();
return;
}
LPOLESTR lpOleStr=L"ee";
DISPID dispid;
hr=pDispatch->GetIDsOfNames(IID_NULL,&lpOleStr,1,LOCALE_SYSTEM_DEFAULT,&dispid);
if(FAILED(hr))
{
MessageBox("GetIDsOfNames 出现错误!");
CoUninitialize();
return;
}
DISPPARAMS dispparms;
memset(&dispparms,0,sizeof(DISPPARAMS));
dispparms.cArgs=2;
VARIANTARG* pArg=new VARIANTARG[dispparms.cArgs];
dispparms.rgvarg=pArg;
CComVariant vAA,vBB;
vAA.vt=VT_I4;
vBB.vt=VT_I4;
memset(pArg,0,sizeof(VARIANT)*dispparms.cArgs);
dispparms.rgvarg[0].vt=VT_VARIANT|VT_BYREF;
dispparms.rgvarg[0].pvarVal=&vAA;
dispparms.rgvarg[1].vt=VT_VARIANT|VT_BYREF;
dispparms.rgvarg[1].pvarVal=&vBB; hr=pDispatch->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispparms,NULL,0,NULL);
if(FAILED(hr))
{
MessageBox("Invoke error");
CoUninitialize();
return;
}
CoUninitialize();错误出现在 invoke函数上 就是dispparms参数出现错误
即出现在 DISPPARAMS 结构中有谁做过这方面工作的人 请指点指点!
dispparms.rgvarg[0].vt=VT_I4|VT_BYREF;
dispparms.rgvarg[0].pvarVal=&aa;
dispparms.rgvarg[1].vt=VT_I4|VT_BYREF;
dispparms.rgvarg[1].pvarVal=&bb;
dispparms.rgvarg[0].plVal=&aa;
dispparms.rgvarg[1].plVal=&bb;
我现在想知道 支持自动化的接口中是否允许有指针类型的参数([in])存在
dispparms.rgvarg[0].vt=VT_I4|VT_BYREF;
dispparms.rgvarg[0].plVal=&bb;
dispparms.rgvarg[1].vt=VT_I4|VT_BYREF;
dispparms.rgvarg[1].plVal=&aa;
多谢cheng_young(古道西风瘦马)