gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

cppからangelscriptの関数の引数を登録する

2010-02-28 17:08:06 | angelscript

いろいろ試してみたけどcppで定義した配列をそのままangelscriptには登録できないみたいです。
公式サイトのフォーラムにも同様な質問があったのでそのURLを載せておきます。日付は2009年7月
http://www.gamedev.net/community/forums/topic.asp?topic_id=552351
angelscript.hで定義されている以下の型のみcppからanglescriptで定義されている関数の引数として設定できるので SetArgAddressで配列を登録できると思っていましたが、どうやら引数が[in,out](参照 &value)の時の戻り値を受け取るためにあるみたいです。(以下のように使う)


・cppからangelscriptで定義された関数の引数を登録するために使用される関数。argは関数の何番目の引数か指定する。 第1引数の場合argには0を設定する。
int   SetArgByte(asUINT arg, asBYTE value) = 0;
int   SetArgWord(asUINT arg, asWORD value) = 0;
int   SetArgDWord(asUINT arg, asDWORD value) = 0;
int   SetArgQWord(asUINT arg, asQWORD value) = 0;
int   SetArgFloat(asUINT arg, float value) = 0;
int   SetArgDouble(asUINT arg, double value) = 0;
int   SetArgAddress(asUINT arg, void *addr) = 0;
int   SetArgObject(asUINT arg, void *obj) = 0;

・angelscriptから受け取れる戻り値の型

asBYTE  GetReturnByte() = 0;
asWORD  GetReturnWord() = 0;
asDWORD GetReturnDWord() = 0;
asQWORD GetReturnQWord() = 0;
float   GetReturnFloat() = 0;
double  GetReturnDouble() = 0;



<form>

angelscriptの関数

<textarea readonly="readonly" cols="75" rows="8">void TestSetArgAddress(float &out outValue) {   outValue = 3.14f; } </textarea>

c++でangelscriptで定義してある関数に引数を登録する。valueの値にangelscriptで変更された戻り値が,Excute後に設定される。c++のvalueの値がangelscriptで設定した3.14の値になる。

<textarea readonly="readonly" cols="75" rows="8">        int funcId = g_pasmod->GetFunctionIdByDecl(chFuncID); //anglescriptの関数を実行するための準備 iRet = g_pasctx->Prepare(funcId); float fvalue = 0.0f; int iRet = g_pasctx->SetArgAddress(0,&fvalue); assert( iRet >= 0 ); // Set the timeout before executing the function. Give the function 1 sec // to return before we'll abort it. DWORD timeOut = timeGetTime() + 1000; //angel scriptの実行 iRet = g_pasctx->Execute(); </textarea>

</form>

コメントを投稿