描述:
具体代码如下:
IDispatch* pIDispatch = NULL;
DISPID dFileConvert;
VARIANTARG vArgs[1];
DISPPARAMS Params;
BSTR bstrSrc, bstrDest;
bstrSrc = ::SysAllocString(_T("D:\\Text.txt"));
bstrDest = ::SysAllocString(_T("D:\\Text.jpg"));
VariantInit(vArgs);
vArgs[1].vt = VT_BSTR;
vArgs[1].bstrVal = bstrSrc;
vArgs[0].vt = VT_BSTR;
vArgs[0].bstrVal = bstrDest;
Params.cArgs = 2;
Params.rgvarg = vArgs;
Params.cNamedArgs = 0;
Params.rgdispidNamedArgs = NULL;
pIDispatch->Invoke(dFileConvert, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &Params, NULL, NULL, NULL);
通过上面的调用时,参数数组vArgs中的vArgs[1]总是不能指向需要的bstrSrc,而是为0,这是什么原因?
请求高手看看,我调试了好久了,不胜感激。
解决方案1:
你声明的是VARIANTARG vArgs[1]; //表示vArgs是只包含了一个VARANTARG元素的数组
而使用的时候:
vArgs[1].vt = VT_BSTR; //超出了vArgs的范围
vArgs[1].bstrVal = bstrSrc;
vArgs[0].vt = VT_BSTR;
vArgs[0].bstrVal = bstrDest;