//使用前已经初始化com
HRESULT hr;
IScriptControlPtr pScriptControl;
hr = pScriptControl.CreateInstance(__uuidof(ScriptControl));
//如果创建实例失败
if(hr != S_OK)
{
return false;
}
LPSAFEARRAY psa;
//省略给psa参数赋值
_variant_t outpar;
BSTR vTemp;
vTemp = _com_util::ConvertStringToBSTR("JScript");
pScriptControl->put_Language(vTemp);
SysFreeString(vTemp);
pScriptControl->put_AllowUI(FALSE);//若脚本出现对话框, 并希望在响应之前, C++ 的窗口要等待, 则用 TRUE
pScriptControl->Timeout = -1;//-1不允许超时操作
//加入脚本
BSTR vTemp;
vTemp = _com_util::ConvertStringToBSTR(RuleScript.GetBuffer());//RuleScript是脚本内容,作为函数参数传进来,全是实验正确的脚本代码
pScriptControl->AddCode(_bstr_t(vTemp));
outpar = pScriptControl->Run(_bstr_t("main"), &psa);
pScriptControl.Release();
以上代码需要循环执行多次经常在pScriptControl->AddCode处报com_error 说存储空间不足,无法执行操作。总起来,每个脚本都是可以运行的,不知道触到那根神经就会报“存储空间不足,无法执行操作”,只要报了,以后任何脚本休想执行了。
HRESULT hr;
IScriptControlPtr pScriptControl;
hr = pScriptControl.CreateInstance(__uuidof(ScriptControl));
//如果创建实例失败
if(hr != S_OK)
{
return false;
}
LPSAFEARRAY psa;
//省略给psa参数赋值
_variant_t outpar;
BSTR vTemp;
vTemp = _com_util::ConvertStringToBSTR("JScript");
pScriptControl->put_Language(vTemp);
SysFreeString(vTemp);
pScriptControl->put_AllowUI(FALSE);//若脚本出现对话框, 并希望在响应之前, C++ 的窗口要等待, 则用 TRUE
pScriptControl->Timeout = -1;//-1不允许超时操作
//加入脚本
BSTR vTemp;
vTemp = _com_util::ConvertStringToBSTR(RuleScript.GetBuffer());//RuleScript是脚本内容,作为函数参数传进来,全是实验正确的脚本代码
pScriptControl->AddCode(_bstr_t(vTemp));
outpar = pScriptControl->Run(_bstr_t("main"), &psa);
pScriptControl.Release();
以上代码需要循环执行多次经常在pScriptControl->AddCode处报com_error 说存储空间不足,无法执行操作。总起来,每个脚本都是可以运行的,不知道触到那根神经就会报“存储空间不足,无法执行操作”,只要报了,以后任何脚本休想执行了。
BSTR vTemp;
vTemp = _com_util::ConvertStringToBSTR(RuleScript.GetBuffer());//RuleScript是脚本内容,作为函数参数传进来,全是实验正确的脚本代码
//RuleScript是CString?是的话就要调用RuleScript.ReleaseBuffer()了
pScriptControl->AddCode(_bstr_t(vTemp));
outpar = pScriptControl->Run(_bstr_t("main"), &psa);
pScriptControl.Release();
最后你有调用SysFreeString(vTemp )吗?