DISPPARAMS dp = {NULL, NULL, 0, 0};
VARIANT vResult;
EXCEPINFO ei;
UINT uArgErr;
// Allocate memory for the arguments array
dp.rgvarg = new VARIANT[2];
if (dp.rgvarg == NULL)
return E_OUTOFMEMORY;
// Set the number of arguments
dp.cArgs = 2;
// Initialize the arguments as empty variants
VariantInit(&dp.rgvarg[0]);
VariantInit(&dp.rgvarg[1]);
// Set the arguments as BSTRs
BSTR account = SysAllocString(L"1234567");
BSTR pwd = SysAllocString(L"123456");
dp.rgvarg[0].vt = VT_BSTR;
dp.rgvarg[0].bstrVal = pwd;
dp.rgvarg[1].vt = VT_BSTR;
dp.rgvarg[1].bstrVal = account;
VariantInit(&vResult);
// Call the function using Invoke
hr = pOR->Invoke(PropertyID[0], IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dp, &vResult, &ei, &uArgErr);
// Free the memory for the arguments array
delete[] dp.rgvarg;
// Convert the BSTR to a char*
char *strResult;
strResult = _com_util::ConvertBSTRToString(vResult.bstrVal);
// Use the char* result
cout << "result: " << strResult << endl;
// Free the memory for the BSTR and the char*
delete[] strResult;
VariantClear(&vResult);
2条答案
按热度按时间ou6hu8tu1#
看一下CoCreateInstance,在调用CocketInstance之前,不要忘记调用CLSIDFromProgID和CoInitialize。
nx7onnlm2#
首先,添加所需的头文件。请注意,
atlmfc
库需要从Visual Studio安装。字符串
然后,在通话前后使用CoInitialize和CoUninitialize:
型
然后,使用CLSIDFromProgID获取对象,并将其存储在
clsid
中:型
然后,使用CoCreateInstance创建Dispatcher:
型
然后,使用IDispatch::GetIDsOfNames获取所需的方法:
型
最后,使用IDispatch::Invoke来修改它。这里我展示了如何传递2个字符串参数,你可以根据需要修改它们:
型