掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プログラムを分割するには? (ID:22037)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
6年も前に書いたので、全くソースに自信なしですが 多分動くんじゃないかしら? ただ、ろくなことがなかったので それ以来、DLLFormは作りませんでした。 動的リンクするDLLにFormをいれると 動的リンクが遅かった気がする。 お望みの方法とは違うような気もしますが 一応、はっときます 書いておいてなんですが、 めるめるさんのやり方のほうが綺麗と思いますよ。 中間ファイルでのデータ受け渡しを発展させて WM_DATAとか、ソケット通信を使う方法とかも考えられます。 複数人開発とかの時は私ならそうします。 DLLForm //////////////////////////////////////////////////////////// //DLLプロジェクトソース library DLLProject; uses SysUtils, Classes, DLLUnit in 'DLLUnit.pas' {Form1}; Exports TestProc; {$R *.RES} begin end. //////////////////////////////////////////////////////////// //DLLユニットソース unit DLLUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TForm1 = class(TForm) private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; procedure TestProc; stdcall; export; implementation {$R *.DFM} procedure TestProc; stdcall; //ここにexport指令は必要なし。 //なしというかexport指令があると、ハングアップしてバグの原因も分からないので //非常に注意すべし。 var DllForm: TForm1; begin DllForm := TForm1.Create(Application); try DllForm.ShowModal; finally DllForm.Free; end; end; end. DLLコールアプリケーション //////////////////////////////////////////////////////////// //アプリプロジェクト program AppliProject; uses Forms, AppliUnit in 'AppliUnit.pas' {Form2}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm2, Form2); Application.Run; end. //特に何も変化無し //////////////////////////////////////////////////////////// //アプリユニット unit AppliUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) private { Private 宣言 } public { Public 宣言 } end; var Form2: TForm2; implementation {$R *.DFM} procedure TestProc; stdcall; external 'DLLProject.dll'; //interface部での宣言でもよいと思う。 procedure TForm2.Button1Click(Sender: TObject); begin TestProc; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.