0

Angelscript を試すためのいくつかの基本的なコードを書いていますが、最も単純な関数でさえ正しく動作することができません。基本的なコード ブロックは次のとおりです。

class Engine {
    public:
       void print(std::string&);
};

Engine::print(std::string &msg)
{
    cout<<msg.c_str()<<endl;
}

以下は、Angelscript の C 関数を初期化して登録する実際のコードです。

int r;

asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);

r = engine->SetMessageCallback(asMETHOD(Engine,MessageCallback), this,asCALL_THISCALL);
assert( r >= 0 );

RegisterStdString(engine);

r = engine->RegisterObjectType("Engine", 0, asOBJ_APP_CLASS_CONSTRUCTOR);
cout<<"r was: "<<r<<endl;
assert( r >= 0 );

r = engine->RegisterObjectMethod("Engine","void print(const string &in)", asMETHOD(Engine,print), asCALL_THISCALL);
assert( r >= 0 );

最初は関数「RegisterObjectType()」が存在しなかったため、プログラムを実行すると、有効なクラスであっても「'Engine' は有効な型ではありません」というエラーがスローされました。そこで、「RegisterObjectType()」という関数を見つけて上記のように実装したところ、最後のフィールドの「RegisterObjectType()」関数で「無効なフラグ」エラーがスローされました。すべてのクラス フラグを試しましたが、それでもこのエラーがスローされます。

クラスメソッドをAngelscriptに登録するための適切な方法は何ですか? ドキュメントの例は機能していないようです。説明している実際の関数を除いて、すべてを切り取っているように見えます。たとえば、クラス メソッド登録コードでオブジェクト型を登録することについてのヒントはありませんでした。または、それについてあまり明確ではありませんでした。

発生したエラーはすべて、angelscript ライブラリによってスローされた実行時エラーであり、コンパイラ エラーではないことに注意してください。

ありがとう!

4

1 に答える 1

0

as_OBJ_APP_CLASS_CONSTRUCTOR は適切なフラグではありません。他の as_OBJ_APP... フラグと組み合わせて使用​​する必要があります。例としてこれを確認してください(少し古い)、オブジェクトタイプを登録する方法の説明:http://www.darawk.com/code/CoHClient/Angelscript/sdk/docs/articles/register_object.html

もちろん、マニュアルはあなたの親友です: http://www.angelcode.com/angelscript/sdk/docs/manual/index.html (Angelscript の使用 -> アプリケーション インターフェイスの登録 -> オブジェクト タイプの登録)

于 2011-10-28T21:22:44.173 に答える