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 ライブラリによってスローされた実行時エラーであり、コンパイラ エラーではないことに注意してください。
ありがとう!