}
IDispatch的调用如下:
DISPID dispId;
OLECHAR* szFuncName = L"ReturnString";
hr = spScriptDisp->GetIDsOfNames(IID_NULL, &szFuncName, /*cNames*/1, LOCALE_SYSTEM_DEFAULT, &dispId);
if (SUCCEEDED(hr))
{
DISPPARAMS dispParams;
dispParams.cArgs = 0;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = nullptr;
dispParams.rgvarg = nullptr;
VARIANT varResult;
VariantClear(&varResult);
hr = spScriptDisp->Invoke(
dispId,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
&dispParams,
&varResult,
/*pExcepInfo*/nullptr,
/*puArgErr*/nullptr);
if (SUCCEEDED(hr))
{
WCHAR szMessage[1024];
StringCchPrintfW(szMessage, /*cchDest*/1024, L"Returned String is \'%s\'.", (WCHAR*)varResult.bstrVal);
::MessageBoxW(/*hWnd*/NULL, szMessage, /*lpCaption*/L"Result", MB_OK);
}
else
{
::MessageBoxW(/*hWnd*/NULL, /*lpText*/L"Failed to call ReturnString().", /*lpCaption*/L"Result", MB_OK);
}
VariantClear(&varResult);
}
运行结果如下:
---------------------------
Result
---------------------------
Returned String is 'This is the result'.
---------------------------
OK
---------------------------
运行环境是:Windows 8 Release Preview + VS2012 RC。
如果还是不能解决你的问题,请贴出你的代码,大家一起讨论。