描述:
COleDispatchDriver cli,im,pro;
IDispatch *tmpdisp;
COleException e;
CLSID clsid;
if (CLSIDFromProgID(OLESTR("RTXServer.RTXAPI"), &clsid) != NOERROR)
{
return;
}
LPUNKNOWN lpUnk;
LPDISPATCH lpDispatch;
//建立主对象
if (GetActiveObject(clsid, NULL, &lpUnk) == NOERROR)
{
HRESULT hr = lpUnk->QueryInterface(IID_IDispatch,
(LPVOID*)&lpDispatch);
lpUnk->Release();
if (hr == NOERROR)
cli.AttachDispatch(lpDispatch, TRUE);
}
// if not dispatch ptr attached yet, need to create one
if (cli.m_lpDispatch == NULL &&
!cli.CreateDispatch(clsid, &e))
{
return ;
}
//建立主对象结束
//建立im对象
static BYTE BASED_CODE parms[] = VTS_BSTR;
cli.InvokeHelper(1, DISPATCH_METHOD, VT_DISPATCH, (void*)&tmpdisp, parms,"SysTools");
im.AttachDispatch(tmpdisp);
//建立property对象
cli.InvokeHelper(1, DISPATCH_METHOD, VT_DISPATCH, (void*)&tmpdisp, parms,"Property");
pro.AttachDispatch(tmpdisp);
//设置属性
static BYTE parms3[] = VTS_VARIANT VTS_VARIANT;
VARIANT propname, propval;
propname.vt = VT_BSTR;
propname.bstrVal = L"Sender";
propval.vt = VT_BSTR;
propval.bstrVal = L"9999";
pro.InvokeHelper(1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms3,&propname,&propval );
VARIANT xx;
static BYTE parmstmp[] = VTS_VARIANT;
pro.InvokeHelper(1, DISPATCH_PROPERTYGET, VT_VARIANT, (void *)&xx, parmstmp,&propname);
/////出错位置
/*********************************
VARIANT propname2, propval2;
propname2.vt = VT_BSTR;
propname2.bstrVal = L"RecvUsers";
propval2.vt = VT_BSTR;
propval2.bstrVal = L"1001,1002";
pro.InvokeHelper(1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms3,&propname2,&propval2 );
VARIANT xx;
static BYTE parmstmp[] = VTS_VARIANT;
pro.InvokeHelper(1, DISPATCH_PROPERTYGET, VT_VARIANT, (void *)&xx, parmstmp,&propname);
*******************************/
如果最后这部分注释代码 出错位置处出错。而如果注释代码被删(注释)掉,则可以正常进行。
解决方案1:
jietie up
解决方案2:使用SysAllocString分配BSTR