.五月雨.のブログ -5ページ目

.五月雨.のブログ

ゲームプログラムとか音楽とか

今日は、今の会社への最終出社日でした。

送別会を開いてくれて、見送ってもらいました。

やりたいことをやるため、辞めましたが、
ほんとに良い上司に恵まれた職場でした。

色んな人に辞めることを惜しまれたのは、
いい仕事ができたからかな・・・?

次の会社でもこうやって惜しまれるような人材になりたいと思います。
C++のクラスや関数のバインドまで成功。

テーブルとスロットって概念がちょっと気持ち悪いな。
テーブルがいわゆるmapかな?
クラスの使い方とごっちゃごちゃになりそうだ。

次は逆にSquirrelからC++へのバインドだな。

エンジンで使うときの自動化とかどうやるんだろうな・・・。



昨日の問題が解決。

問題は2点。
まず、SqratのDefaultVMに標準のvmを設定する必要があった
もう一点はvmを使うクラスを生成したら、vmよりも先に開放が必要。
参照カウンタの部分でエラーになる。

あちこちのサイトを参考にしました(;・∀・)

// 文字列出力
static void printfunc(HSQUIRRELVM vm, const SQChar* format, ...)
{
va_list args;
va_start(args, format);
#ifdef SQUNICODE
vwprintf(format, args);
#else
vprintf(format, args);
#endif
va_end(args);
}

// メイン
int main(int argc, char** argv)
{
// Sqratの名前空間
using namespace Sqrat;

// VMの作成
HSQUIRRELVM vm = sq_open(1024);

// エラーハンドラを設定
sqstd_seterrorhandlers(vm);

// 文字列出力関数を設定
sq_setprintfunc(vm, printfunc);


// 標準で使うVMの設定
DefaultVM::Set(vm);

// vmより先に開放される必要があるので
// ブロック内のローカル変数にしてあります。
{
Script scriptA;
scriptA.CompileString("print(\"Hello, Sqrat World.\\n\")");
scriptA.Run();
}

// メモリの動的確保で明示的に先に開放
Script* scriptA = new Script();
scriptA->CompileFile("test.nut");
scriptA->Run();
delete scriptA;

// VMを解放
sq_close(vm);

return 0;
}