2011-08-08 10 views
0

私はAngelscriptを試すための基本的なコードを書いていますが、最も単純な関数を正しく動作させることはできません。ここで基本コードブロックである: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」I機能を持っていなかった最初に、そのプログラムを実行すると、有効なクラスであっても、「 'エンジンは有効な型ではありません」というエラーがスローされます。だから私は "RegisterObjectType()"と呼ばれる関数を発見し、上記のように実装し、今は "RegisterObjectType()"関数の最後のフィールドで "無効なフラグ"エラーを投げている。私はすべてのクラスのフラグを試して、それでもこのエラーをスローします。

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

すべてのエラーは、アンゼルススクリプトライブラリによってスローされた実行時エラーであり、コンパイラエラーではありません。

ありがとうございます!

答えて

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

(アプリケーションinterface->オブジェクトタイプの登録の登録> Angelscript-使用)