• ベストアンサー

グローバル変数はDLLの中で使えますか?

DLL化する関数の中でグローバル変数を使っているのですが、 DLLの関数の中でもグローバル変数を使えますか? やっぱり、引数として渡すしかないでしょうか? Delphi XE5 starter を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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

kihonkana
質問者

補足

回答ありがとうございます。 DLLについて調べていて、わかったんですが、PChar型またはShortString型以外のデータをやり取りできるのはDLLとDLLを使うプログラムの両方をDelphiで作った場合だけなんですか? これ以外のデータをやり取りする場合(文字配列、TStringListのデータ等)は、構造体のポインタを渡し、構造体のポインタを受け取るようにするしかないのですか?

関連するQ&A