いろいろ試してみたけど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>
※コメント投稿者のブログIDはブログ作成者のみに通知されます