こんにちは、honiyonです。
複数アプリケーションからそれぞれコールバック関数を登録してもらい、状況に応じてそれぞれのコールバック関数を呼び出す、というDLLを作成しています。
しかし現在、呼び出しアプリケーションごとにメモリ空間が独立してしまい、コールバック情報を同一空間内で管理出来ずに困っています。
旧VerのDelphiで16bit DLLなら、interface部に定義した変数、オブジェクトはDLL内で同一空間内で共有出来るようですが、これをDelphi6 32bitDLLで行う事は不可能でしょうか? もしくは、その他の方法で独立メモリ空間を作らないようにする方法はありますでしょうか?
不可能な場合、CreateFileMappingが次に有効な手段として候補に挙がると思います。CreateFileMappingで管理クラスのポインタを渡してクラス共有というのは現実的な手法でしょうか?
よろしくお願いいます(..
No.1ベストアンサー
- 回答日時:
Delphiは無知なので一般的な意見です。
メモリマップドファイル(共有メモリ)は現実的だと思います。特に16->32bit移行時には良く使われた手法ではないかと思います。
片やDLLの共有領域はVC++等では共有セグメントを指定すれば可能ですが、Delphi(特にLinker)でどのような扱いになるのか???
Win32の寿命、その他から、個人的には共有メモリを推します。
No.2
- 回答日時:
私もDelphiは知らないので、一般的な意見を…。
CreateFileMapping による共有メモリが有効だと思いますが、「管理クラスのポインタを渡して」という方法でうまくいくのかどうかは分かりません。必要なデータだけを共有メモリにおくべきだと思います。
複数アプリからということなので、アプリごとに異なるデータをやり取りするのなら、ウィンドウメッセージを使うという方法もあります。対象アプリにはウィンドウハンドルを登録してもらって、独自のメッセージコード(WM_USER以降)やWM_COPYDATAメッセージなどでデータをやり取りするのも一つの手です。Delphiでメッセージ処理がどのように行われているのかはよく知りませんが…。
この回答への補足
こんにちは、honiyonです。
お礼が遅くなり申し訳ありませんm(_ _)m
失礼ながらここにまとめてお礼させて頂きます。
調査したところ、メモリ空間が完全に独立してしまい、ポインタを共有したところで、渡された側でデータを参照できませんでした。
今回共有したかったデータはクラス型であったり、少々無理を感じたので設計そのものを見直す事にしました。
ご回答有難うございました(。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
ダイアログクラスのコントロー...
-
C言語(BCB)で双方向リストを...
-
既定のコンストラクタがない?
-
C#のクラス設計について教えて...
-
DLLからEXEのクラスを呼び出す...
-
このコンパイルエラーの意味に...
-
クラスのメンバになってくれま...
-
ダイアログ表示時にチェックボ...
-
【VC++】クラスの追加方法について
-
質問です!とても基本的なこと...
-
【ASP.NET】 独自で作成したク...
-
C#文字でクラスのメンバにアクセス
-
IncludeではなくClassで宣言す...
-
スプラッシュコントロールの挿...
-
エディットコントロールでEnter...
-
MFCアプリのコマンドラインでパ...
-
WindowsAPIのリストビューの...
-
クラスのアドレスを引数として...
-
エディットコントロールのイベ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
エディットコントロールでEnter...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
DebugクラスとTraceクラスの違い
-
MFCのCListCtrlでスクロールを検出
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
継承したクラスを、継承元のク...
-
OnInitDialog()の関数の組み込み方
-
ダイアログクラスのコントロー...
-
MessageBoxを継承したい
-
DataGridViewのセルに斜線を引...
-
このコンパイルエラーの意味に...
-
MFCアプリのコマンドラインでパ...
-
C#のクラス設計について教えて...
おすすめ情報