Выполнение cscript с использованием IActiveScript с C++

Я пытаюсь выполнить скрипт, используя cscript с IActiveScriptParse и ParseScriptText, но по какой-то причине получаю сообщение об ошибке: E_UNEXPECTED.

Эта статья мне очень помогла. Я использую его функцию getEngineGuid в своем коде.

Код ниже - это то, что я пробовал. Он печатает:

-2147418113
-2147418113

Значение activeScriptParse->ParseScriptText возвращает E_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;
}

Большое спасибо!


person Ella Sharakanski    schedule 15.05.2015    source источник
comment
Двигатель сначала хочет свой сайт. См. IActiveScript::SetScriptSite   -  person Igor Tandetnik    schedule 16.05.2015


Ответы (1)


Комментарий Игоря Тандетника указал мне правильное направление.

В статье, которую я использовал, показано, как SetScriptSite, но она написана на c. Этот вопрос: Как загрузить и вызвать функцию VBScript из в C++ есть очень полезный ответ.

Как говорится в этом ответе, вам следует определить класс, который имеет как минимум IActiveScriptSite и IActiveScriptSiteWindow в качестве интерфейсов.

person Ella Sharakanski    schedule 16.05.2015