名前 題名 ▼ Mr.XRAYさん > [DLL にて except 使用] > http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201806/18060002.txt > > abc 2018/06/14(木) 05:58:32 > > のコードを解読すると以下のようなことのようです. > 何とも言えない,面白いのか,変なのか,摩訶不思議なと言うか... (^^: > > DLL を使用する側のプロジェクトのコード > > unit Unit1; > > interface > > uses > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, > Dialogs, StdCtrls; > > type > TForm1 = class(TForm) > Button1: TButton; > Memo1: TMemo; > procedure Button1Click(Sender: TObject); > private > { Private 宣言 } > public > { Public 宣言 } > end; > > procedure FormProcA(AText: PChar);stdcall; > > var > Form1: TForm1; > > implementation > > {$R *.dfm} > > procedure DLL_funcA(AProc: TFarProc); stdcall; external 'Test_DLL.dll'; > > //----------------------------------------------------------------------------- > // DLL内の関数を実行 > // 引数はこのユニット内で定義している関数 > // つまり,DLLからこのフォームの関数を実行している > //----------------------------------------------------------------------------- > procedure TForm1.Button1Click(Sender: TObject); > begin > DLL_funcA(@FormProcA); > end; > > //----------------------------------------------------------------------------- > // この関数をDLLから実行する > //----------------------------------------------------------------------------- > procedure FormProcA(AText: PChar); > begin > Form1.Memo1.Lines.Add(AText); > end; > > end. > > > DLL のコード > > library Test_DLL; > > uses > Windows; > > type > TMyFuncType = procedure (AText: PChar);stdcall; > > var > FormProcA : TMyFuncType; > > //----------------------------------------------------------------------------- > procedure DLL_funcA(AProc: TFarProc); stdcall; > begin > @FormProcA := AProc; > FormProcA('*** ABC ***'); > end; > > //----------------------------------------------------------------------------- > exports > DLL_funcA; > > end. > > > 実行結果です. > 実行環境は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro です. > 質問された方が書いている LogWriteProc2 は無理です. > 何故なら関数内関数になっています. > もちろん,expect は全く関係ありませんです. > もちろん,バグでもありません. > > これが朝起きて最初の作業.おそまつ ! (笑) > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link