帮我看看这段代码!

maoerwei 2002-10-29 09:15:59
代码:
LPOLESTR progid=L"CDCA_AGENTS.clsUserProfile";
CLSIDFromProgID(progid,&clsid);
IDispatch* pDispatch=NULL;
hr=CoInitialize(NULL);
hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC,IID_IDispatch,(void **)&pDispatch);
DISPID dispid;
LPOLESTR str=L"StartUp";
hr=pDispatch->GetIDsOfNames(IID_NULL,&str,1,LOCALE_SYSTEM_DEFAULT,&dispid);
DISPPARAMS params;
memset(¶ms,0,sizeof(DISPPARAMS));
params.cArgs =2;
VARIANTARG* pArg=new VARIANTARG[2];
params.rgvarg =pArg;
memset(pArg,0,sizeof(VARIANT)*2);
VariantInit(&pArg[0]);
pArg[0].vt =VT_BSTR;
CComBSTR URL="http://PROGRAM162:8510/CWSLISTENER.CGI";
pArg[0].bstrVal=URL.Copy();
VariantInit(&pArg[1]);
pArg[1].vt=VT_DISPATCH ;
LPDISPATCH frm_Dispatch=NULL;
pArg[1].pdispVal =frm_Dispatch;
DISPPARAMS params={pArg,NULL,2,0};
VARIANTARG m_result;
VariantInit(&m_result);
hr=pDispatch->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,¶ms,&m_result,0,NULL);
注:Invoke调用的组件对象是用VB写的方法模型是:StartUp(ByVal str as string,ByVal MainFrame as Object) as long
在调试过程中总是报出DISP_E_TYPEMISMATCH的错误,把方法模型改成只有一个参数如:StartUp(ByVal str as string) as long
StartUp(ByVal MainFrame as Object) as long
均调试通过!烦请高手指点!
...全文
80 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoerwei 2002-10-30
  • 打赏
  • 举报
回复
谢了!马上给分!
kenwhale 2002-10-29
  • 打赏
  • 举报
回复
IDispatch的参数是反向入栈的,就是说pArg[0]---Object,pArg[1]---String,明白了吧??你搞反了。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧