2

cscriptwith IActiveScriptParseandを使用してスクリプトを実行しようとしています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;
}

どうもありがとう!

4

1 に答える 1

2

Igor Tandetnik のコメントは、正しい方向を示してくれました。

私が使用した記事は方法を示していますSetScriptSiteが、それはで書かれていcます。この質問: C++ 内から VBScript 関数を読み込んで呼び出す方法には、非常に役立つ回答があります。

その答えが言うように、あなたがすべきことは、少なくともIActiveScriptSiteandIActiveScriptSiteWindowをインターフェースとして持つクラスを定義することです。

于 2015-05-16T16:53:25.227 に答える