DLLの中は別世界
スクリプトをゲームに実装していて気付いたこと。
いやま、前から知っていたこともあるけど。
DLLを作る上で注意しなければならないこと。
まぁ、当たり前と言えば当たり前ですが。
・DLL内で確保した領域は、DLL内で解放する
ちなみに、すべてDllMain()内で確保/解放する必要はなく、確保/解放用の関数を用意すればOK。
後、VC固有のメモリリーク感知を仕込んでもDLL内のリークは感知できないので注意。
と、ここまでは既知の事項だったわけですが。
今回気付いたのは擬似乱数に関して。
僕はC標準のrand()を使っている*1んですが、コイツの値を操作するのにsrand()を使います。
で、このsrand()に関しても、先ほどの確保/解放と同じことが言えたりします。
要するに、
必要があるということ。
・srand()はDLL内で初期化する
「DLL内で扱う値はすべてDLL内で完結させる」必要がありそうな雰囲気だなぁ…。
*1:精度が悪いとかいろいろ言われていますが、普通に使えるしC標準だし、実装するのが楽なんで採用してます。