さて、コードから実行されている抽象仮想マシン (「PAWN」) があり、スクリプトは関数を実行できます。これらの関数は、C++ コードによって実行される C コードからスクリプトに登録されます。
C++ コードは、次の形式で配列を提供する必要があります。
{ "name_i_want_the_function_to_have_in_the_script" , function_in_my_cpp_code }
関数が配列にない場合、実行できません。(「存在しない」ため)
したがって、これにより次のことがわかります。
私の関数は次のようになります。
//Pawn Functions
#define PWNFUNC(a) static cell AMX_NATIVE_CALL a(AMX *amx, cell *params)
namespace PawnFunc
{
PWNFUNC(GGV)
{
return pGameInterface->FindGameVersion();
}
};//namespace PawnFunc
スクリプト関数情報を含む配列は、次のように別のファイルにあります。
AMX_NATIVE_INFO custom_Natives[] =
{
{ "GetGameVersion", PawnFunc::GGV },
{ 0,0 }
};
問題は次のとおりです。
そのアレイを自動更新することは可能ですか? (コンパイル時またはコード初期化時前/時)
今のところ、各機能を手動で追加する必要があります。これは時々面倒で、エラーが発生しやすくなります。
次のように変更したいと思います。
//Pawn Functions
#define PWNFUNC(a,b) ...?...
namespace PawnFunc
{
PWNFUNC(GGV,GetGameVersion)//{ "GetGameVersion", PawnFunc::GGV }, is now added to "custom_Natives" array
{
return pGameInterface->FindGameVersion();
}
};//namespace PawnFunc
これはまったく可能ですか?はいの場合、どうすればこれを達成できますか?
名前空間をループすることは可能ですか?
編集:ここにいくつかの擬似コードがあります:http://ideone.com/btG2lx
また、メモ: 実行時に実行できますが、DLLMain で実行する必要があります (私のプログラムは DLL です)。