C++ 使用带有C+的IActiveScript执行cscript+;

C++ 使用带有C+的IActiveScript执行cscript+;,c++,com,wsh,iactivescript,C++,Com,Wsh,Iactivescript,我正在尝试使用cscript和iactiveScriptPasse和ParseScriptText执行脚本,但由于某种原因,我得到一个错误:E\u意外的 这对我帮助很大。我在代码中使用了它的getEngineGuid函数 下面的代码是我尝试过的。它打印: -2147418113 -2147418113 意思是activeScriptParse->ParseScriptText返回E\u意外的。那么我做错了什么 #include <iostream> #include <Win

我正在尝试使用
cscript
iactiveScriptPasse
ParseScriptText
执行脚本,但由于某种原因,我得到一个错误:
E\u意外的

这对我帮助很大。我在代码中使用了它的
getEngineGuid
函数

下面的代码是我尝试过的。它打印:

-2147418113
-2147418113
意思是
activeScriptParse->ParseScriptText
返回
E\u意外的
。那么我做错了什么

#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
共初始化(空);
GUID-guidBuffer;
//查找用于以.js扩展名结尾的文件的脚本引擎。
//这在我链接到的文章中得到了实现。
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={};
变异结果;

库特伊戈尔·坦德尼克的评论为我指明了正确的方向

我使用的文章展示了如何
SetScriptSite
,但它是用
c
编写的。这个问题:有一个非常有用的答案


正如这个答案所说,您应该定义一个至少有
IActiveScriptSite
IActiveScriptSiteWindow
作为接口的类。

引擎首先需要它的站点。请参见
IActiveScriptSite::SetScriptSite