DLLの中は別世界

 スクリプトをゲームに実装していて気付いたこと。

いやま、前から知っていたこともあるけど。

 DLLを作る上で注意しなければならないこと。


・DLL内で確保した領域は、DLL内で解放する
まぁ、当たり前と言えば当たり前ですが。

ちなみに、すべてDllMain()内で確保/解放する必要はなく、確保/解放用の関数を用意すればOK。

後、VC固有のメモリリーク感知を仕込んでもDLL内のリークは感知できないので注意。



 と、ここまでは既知の事項だったわけですが。

今回気付いたのは擬似乱数に関して。

 僕はC標準のrand()を使っている*1んですが、コイツの値を操作するのにsrand()を使います。

で、このsrand()に関しても、先ほどの確保/解放と同じことが言えたりします。

要するに、

・srand()はDLL内で初期化する
必要があるということ。



 「DLL内で扱う値はすべてDLL内で完結させる」必要がありそうな雰囲気だなぁ…。




*1:精度が悪いとかいろいろ言われていますが、普通に使えるしC標準だし、実装するのが楽なんで採用してます。