0

AngelScript から C++ に変数を渡したいです。
私はすでに AngelScript から C++ に、またその逆に関数を渡すことができました。
C++ から AngelScript に変数を渡すこともできますが、その逆の方法がわかりません。
マニュアルは私を助けませんでした、または私はその部分を監督しました.
ヒントを教えてください。

編集:

コメントで述べたように、ここでは私がすでにできたことです。

私のtest.asファイルで:

int add(int a, int b)
{
    print("Hello World, I'm AngelScript\n");
    multi(5, 13);
    print("c is " + c + "\n");
    return (a + b);
}

私のtest.cppファイル:

int multi(int x, int y)
{
    int z = x * y;
    cout << "x aus dem Skript: " << x << endl;
    cout << "y aus dem Skript: " << y << endl;
    printf("Ergebnis von multi x * y: %d\n", z);
    return z;
}

void print(string &msg)
{
    printf("%s", msg.c_str());
}

int _tmain(int argc, _TCHAR* argv[])
{
    int r;
    int c = 42;

    asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);

    RegisterStdString(engine);

    // pass function print to angelscript
    r = engine->RegisterGlobalFunction("void print(const string &in)", asFUNCTION(print), asCALL_CDECL); assert(r >= 0);
    // pass function multi to angelscript
    r = engine->RegisterGlobalFunction("int multi(int, int)", asFUNCTION(multi), asCALL_CDECL); assert(r >= 0);
    // pass variable c to angelscript
    r = engine->RegisterGlobalProperty("int c", &c); assert(r >= 0);

    FILE *f = fopen("test.as", "rb");

    fseek(f, 0, SEEK_END);
    int len = ftell(f);
    fseek(f, 0, SEEK_SET);

    string script;
    script.resize(len);
    fread(&script[0], len, 1, f);

    fclose(f);

    mod->AddScriptSection("script", &script[0], len);
    mod->Build();

    asIScriptContext *ctx = engine->CreateContext();

    // get function add from angelscript
    asIScriptFunction *func = engine->GetModule("test.as")->GetFunctionByDecl("int add(int, int)");

    ctx->Prepare(func);
    ctx->SetArgDWord(0, 7);
    ctx->SetArgDWord(1, 20);

    if (ctx->Execute() == asEXECUTION_FINISHED)
    {
        asDWORD returnValue = ctx->GetReturnDWord();
        cout << "Result of a + b is: " << returnValue << endl;
    }

    ctx->Release();
    engine->Release();

    return 0;
}
4

1 に答える 1