com — Выполнение cscript с использованием IActiveScript с переполнением стека

Я пытаюсь выполнить скрипт, используя 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;
}

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

2

Решение

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

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

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

2

Другие решения


По вопросам рекламы [email protected]