質問: グローバル変数はdllの中で使えますか? dll化する関数の中でグローバル変数を使っているのですが、 dllの関数の中でもグローバル変数を使えますか? やっぱり、引数として渡すしかないでしょうか? delphi xe5 starter を使っています。
回答: >dll化する関数の中でグローバル変数を使っているのですが、 >dllの関数の中でもグローバル変数を使えますか? dll内ではグローバル変数は使えません。 dllは、リエントラント(スレッドセーフ)にすべきです。 >やっぱり、引数として渡すしかないでしょうか? そうなるでしょうけど、不正な引数を渡された時にエラーで弾く仕組みが必要だと思います。 例えば、構造体のポインタを渡す方式にして、構造体の先頭のメンバーに「構造体のサイズ」を予めセットしておかないと呼び出し時にエラーにする、など。 こうすると、バージョンアップで「構造体メンバーが増えた時」に、先頭のメンバーに入っている「構造体のサイズ」をdll側で検査する事で「旧方式で呼び出した」か「新方式で呼び出した」かを判定して処理を振り分けできます。