アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

Delphi XE5 starter を使っています。

A 回答 (1件)

>DLL化する関数の中でグローバル変数を使っているのですが、


>DLLの関数の中でもグローバル変数を使えますか?

DLL内ではグローバル変数は使えません。

DLLは、リエントラント(スレッドセーフ)にすべきです。

>やっぱり、引数として渡すしかないでしょうか?

そうなるでしょうけど、不正な引数を渡された時にエラーで弾く仕組みが必要だと思います。

例えば、構造体のポインタを渡す方式にして、構造体の先頭のメンバーに「構造体のサイズ」を予めセットしておかないと呼び出し時にエラーにする、など。

こうすると、バージョンアップで「構造体メンバーが増えた時」に、先頭のメンバーに入っている「構造体のサイズ」をDLL側で検査する事で「旧方式で呼び出した」か「新方式で呼び出した」かを判定して処理を振り分けできます。

この回答への補足

回答ありがとうございます。
DLLについて調べていて、わかったんですが、PChar型またはShortString型以外のデータをやり取りできるのはDLLとDLLを使うプログラムの両方をDelphiで作った場合だけなんですか?

これ以外のデータをやり取りする場合(文字配列、TStringListのデータ等)は、構造体のポインタを渡し、構造体のポインタを受け取るようにするしかないのですか?

補足日時:2014/12/05 14:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!