Delphi가 DLL로 플러그인을 구현하는 간단한 사례
이것은 DLL 코드입니다.
구현 코드:
library MyDll;
uses
SysUtils,
Dialogs,
Classes;
procedure ShowInfo(info:PChar);stdcall;
begin
ShowMessage(' 【'+info+'】');
end;
function GetCaption:Pchar;
begin
Result := ' ';
end;
exports ShowInfo,
GetCaption;
{$R *.res}
begin
end.
이것은 창을 호출하는 코드입니다이 예제에서는 DLL이 하나만 사용되므로 여러 DLL이 있는 경우 DLL이 있는 디렉토리를 순환하여 DLL을 순차적으로 로드해야 합니다.
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls;
type
TShowInfo = procedure (info:PChar);stdcall;
TGetCaption = function : PChar;stdcall;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
MainMenu1: TMainMenu;
Image1: TImage;
procedure Button2Click(Sender: TObject); private
{ Private declarations }
FHandel : THandle; //DLL
FProAddress: Pointer; //DLL ShowInfo
showinfo: TShowInfo; // DLL
procedure LoadPlusIn; // (DLL)
procedure ItemClick(Sender: TObject); //
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
LoadPlusIn;
end;
procedure TForm1.ItemClick(Sender: TObject);
begin
@showinfo := FProAddress; //
if @showinfo <> nil then
showinfo(PWideChar(TMenuItem(Sender).Caption)); // DLL ShowInfo
end;
procedure TForm1.LoadPlusIn;
var
getcaption: TGetCaption;
item : TMenuItem;
begin
FHandel := LoadLibrary('MyDll.dll'); //
if FHandel = 0 then
begin
ShowMessage(' !');
Exit;
end
else
begin
@getcaption := GetProcAddress(FHandel,'GetCaption'); // DLL GetCaption
if @getcaption <> nil then
begin
item := TMenuItem.Create(MainMenu1); //
item.Caption := getcaption; // Caption, DLL GetCaption
FProAddress := GetProcAddress(FHandel,'ShowInfo'); // DLL ShowInfo
item.OnClick := ItemClick; //
MainMenu1.Items.Add(item); //
end;
end;
end;
end.
궁금한 점이 있으면 메시지를 남기거나 본 사이트 지역사회에 가서 토론하세요. 읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.