掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLL上の例外をコピーした文字列をFreeLibraryにアクセスとエラーになる (ID:49511)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 変数 S の実体が DLL 側にあるような気がするんですが その通りのことが起こっているのではないですか? Delphiの文字列には色々な種類がありますが、その中で最も一般的な「長い文字列」の場合、 S1 := S2; のように文字列を代入しても、文字列の中身はコピーされません。 両方が同じメモリ領域を共有するよう、ポインタが設定されます。 (S1もしくはS2の一部だけを書き換えようとすると、その時に初めてコピーが作られて S1とS2が別々のメモリを指すようになります。Copy on write と呼ばれるテクニックですね。) ところが、S2がDLL側で作られた文字列だと exeとdllではメモリマネージャが別々に分かれているので、 S2が破棄されてもexe側ではそれを検知できません。 知らないところでメモリが破棄されて、 共有しているつもりの領域を指すポインタが無効になってしまうわけです。 このようなことを防ぐには、両方で共有メモリマネージャを使うようにしましょう。 ヘルプを "ShareMem" で検索!
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.