こんにちは、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で質問しましょう!
似たような質問が見つかりました
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- 政治 中国は一票の格差4倍で、日本は3倍ですが、それでも日本は民主主義国なら中国も同じですよね? 2 2023/03/16 04:52
- 不動産業・賃貸業 賃貸契約契約の解除 1 2022/11/07 18:02
- 分譲マンション 総会前にきて、管理会社のフロントマンに振り回され役員一同が困っています。 5 2023/05/15 03:12
- その他(教育・科学・学問) 関数、写像について 1 2022/04/10 23:45
- 物理学 ベクトルと座標系につきまして 1 2022/04/03 06:23
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- 弁護士・行政書士・司法書士・社会保険労務士 遺産分割協議書の原本と印鑑証明書のコピーについて教えて下さい。 5 2022/05/03 13:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラマーと学歴の関係性に...
-
プログラミングを教えたいです...
-
vba クリップボードクリアにつ...
-
小学1年生の子です。塾に行かせ...
-
楽しくて最高のプログラミング...
-
プログラミング、アーキテクチ...
-
Windowsのアプリ開発ってなんの...
-
プログラミング
-
Google ColaboでGUI作成
-
Pythonでgif画像が上手く作れない
-
ExcelVBAでFormulaR1C1を列範囲...
-
昔のパソコン少年の武勇伝「店...
-
IT業界より楽に稼げる業界って...
-
chatGPTで次々と質問をしていく...
-
初心者が簡単なPowerShellスク...
-
python の 連鎖代入の文法
-
windowsでテキストファイルの各...
-
matplotlibで任意の角度の円弧...
-
プログラミングで例えばゲーム...
-
ものづくりに向いているプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報