在 C++ 中使用 IActiveScript 执行 cscript
Executing cscript using IActiveScript with C++
我正在尝试使用 cscript
与 IActiveScriptParse
和 ParseScriptText
执行脚本,但由于某种原因我收到错误消息:E_UNEXPECTED
.
这个article对我帮助很大。我在我的代码中使用它的 getEngineGuid
函数。
下面的代码是我试过的。它打印:
-2147418113
-2147418113
意思是activeScriptParse->ParseScriptText
returnsE_UNEXPECTED
。那我做错了什么?
#include <iostream>
#include <Windows.h>
#include <ObjBase.h>
#include <ActivScp.h>
using namespace std;
int main(int argc, char* argv[])
{
CoInitialize(NULL);
GUID guidBuffer;
// Find the script engine to use for files that end with a .js extension.
// This is implemented in the article I linked to.
getEngineGuid(".js", &guidBuffer);
IActiveScript *activeScript;
CoCreateInstance(guidBuffer, 0, CLSCTX_ALL,
IID_IActiveScript,
(void **)&activeScript);
IActiveScriptParse *activeScriptParse;
activeScript->QueryInterface(IID_IActiveScriptParse,
(void **)&activeScriptParse);
activeScriptParse->InitNew();
EXCEPINFO ei ={};
VARIANT result;
cout << E_UNEXPECTED << endl;
cout << activeScriptParse->ParseScriptText(OLESTR("(new Date()).getTime()"), NULL,
NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION,
&result, &ei) << endl;
activeScriptParse->Release();
return 0;
}
非常感谢!
Igor Tandetnik 的评论为我指出了正确的方向。
我使用的文章显示了如何 SetScriptSite
但它是用 c
写的。这个问题:How to load & call a VBScript function from within C++ 有一个非常有用的答案。
正如那个答案所说,你应该做的是定义一个 class 至少有 IActiveScriptSite
和 IActiveScriptSiteWindow
作为接口。
我正在尝试使用 cscript
与 IActiveScriptParse
和 ParseScriptText
执行脚本,但由于某种原因我收到错误消息:E_UNEXPECTED
.
这个article对我帮助很大。我在我的代码中使用它的 getEngineGuid
函数。
下面的代码是我试过的。它打印:
-2147418113
-2147418113
意思是activeScriptParse->ParseScriptText
returnsE_UNEXPECTED
。那我做错了什么?
#include <iostream>
#include <Windows.h>
#include <ObjBase.h>
#include <ActivScp.h>
using namespace std;
int main(int argc, char* argv[])
{
CoInitialize(NULL);
GUID guidBuffer;
// Find the script engine to use for files that end with a .js extension.
// This is implemented in the article I linked to.
getEngineGuid(".js", &guidBuffer);
IActiveScript *activeScript;
CoCreateInstance(guidBuffer, 0, CLSCTX_ALL,
IID_IActiveScript,
(void **)&activeScript);
IActiveScriptParse *activeScriptParse;
activeScript->QueryInterface(IID_IActiveScriptParse,
(void **)&activeScriptParse);
activeScriptParse->InitNew();
EXCEPINFO ei ={};
VARIANT result;
cout << E_UNEXPECTED << endl;
cout << activeScriptParse->ParseScriptText(OLESTR("(new Date()).getTime()"), NULL,
NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION,
&result, &ei) << endl;
activeScriptParse->Release();
return 0;
}
非常感谢!
Igor Tandetnik 的评论为我指出了正确的方向。
我使用的文章显示了如何 SetScriptSite
但它是用 c
写的。这个问题:How to load & call a VBScript function from within C++ 有一个非常有用的答案。
正如那个答案所说,你应该做的是定义一个 class 至少有 IActiveScriptSite
和 IActiveScriptSiteWindow
作为接口。