Delphi は DLL を使用してプラグインの簡単な例を実装します
これはDLLのコードです
実装コード:
ライブラリ MyDll; SysUtils、ダイアログ、クラスを使用します; プロシージャ ShowInfo(info:PChar); begin ShowMessage('You selected ['+info+']'); 関数 GetCaption:Pchar ;終了; ShowInfo、GetCaption をエクスポートします。
これはフォームを呼び出すコードです
この例では DLL を 1 つだけ使用するため、DLL が複数ある場合は、DLL が配置されているディレクトリをループして、DLL を順番にロードする必要があります。
ユニット Main; インターフェイスは Windows、メッセージ、SysUtils、バリアント、クラス、グラフィックス、コントロール、フォーム、ダイアログ、StdCtrls、メニュー、ExtCtrls を使用します。タイプ TShowInfo = プロシージャ (info:PChar);stdcall = 関数 : PChar;stdcall; = クラス (TForm) ボタン 1: T ボタン 2: メインメニュー 1: TMainMenu; Image1: TImage; 手続き Button2Click(Sender: TObject); private { プライベート宣言 } FHandel : THandle; // DLL 内の ShowInfo のアドレス showinfo: TShowInfo; DLL プロシージャ LoadPlusIn; // プラグイン (DLL) プロシージャの読み込み ItemClick(Sender: TObject); // カスタム メニューのクリック イベント public { パブリック宣言 } end; var Form1: TForm1; 実装 {$R *.dfm} プロシージャ TForm1.ItemClick(Sender: TObject); ; //アドレスを取得 if @showinfo <> nil then showinfo(PwideChar(TMenuItem(Sender).Caption)); //DLL で ShowInfo を実行します end; var getcaption: TGetCaption; begin FHandel := LoadLibrary('MyDll.dll'); FHandel = 0 の場合はロード中です。ShowMessage('ロードに失敗しました! '); exit else begin @getcaption := GetProcAddress(FHandel,'GetCaption') //DLL 内の GetCaption アドレスを取得する if @getcaption <> nil then begin item := TMenuItem.Create(MainMenu1);メニュー項目を作成します。Caption := getcaption // キャプションを取得します。つまり、DLL FProAddress で GetCaption を呼び出します。 GetProcAddress(FHandel,'ShowInfo'); //DLL 内の ShowInfo のアドレスを取得します item.OnClick := ItemClick // クリック イベントをメニュー項目に割り当てます MainMenu1.Items.Add(item);メインメニュー終了; 終了。
ご質問がございましたら、メッセージを残すか、このサイトのコミュニティにアクセスしてご連絡ください。お読みいただきありがとうございます。このサイトをご支援いただきありがとうございます。