Delphi- DLL 작업

5407 단어 Delphi
동적 링크 라이브러리(Dynamic Link Library)는 여러 Windows 응용 프로그램에서 실행할 수 있고 공유할 수 있는 프로그램 모듈(Module)입니다.모듈에는 코드, 데이터와 자원이 포함되어 있습니다.동적 링크 라이브러리의 장점: 반복 컴파일과 링크를 하지 않고 메모리를 불러오면 DLL의 함수는 실행 중인 프로그램에서 사용할 수 있으며 함수가 여러 개의 COPY를 만들지 않아도 된다.DLL과 EXE는 매우 유사한데, DLL 파일에는 실행 가능한 코드가 포함되어 있지만 단독으로 실행할 수 없고, Windows 응용 프로그램에서만 직접 또는 간접적으로 호출할 수 있다는 점에서 다르다.
정적 링크는 응용 프로그램에서 호출된 라이브러리 함수 COPY를 응용 프로그램에 복사하는 것입니다.동적 링크, 프로그램이 어떤 DLL의 함수를 사용했을 때, 동적 링크는 COPY 코드를 사용하지 않거나, 실행 중 DLL의 위치에서 필요한 함수 코드를 찾을 수 있습니다.
 
첫 번째 방법:
생동감 있는 DLL, 직접 실행할 수 없습니다.prjoect에서complie를 누르거나 ctrl + F9을 누르면 생성된 DLL을 새 프로젝트에 복사합니다.
uses

  SysUtils,

  Classes;



{$R *.res}



function Max(x,y,z:Integer):Integer;stdcall;

var

  t:Integer;

begin

  if (x<y) then

    t := y;

  else

    t := x;



  if (t<z) then

    t := z;



  Result := t;

end;



begin



end.

 
테스트 호출 실행:
var

  Form1: TForm1;

  function Max(x,y,z:Integer):Integer;stdcall;external 'ProjectMax.dll';



implementation



{$R *.dfm}



procedure TForm1.btn1Click(Sender: TObject);

var

  t: Integer;

begin

  t := Max(3,4,1);

  ShowMessage(IntToStr(t));

end;

 
DLL 동적 호출
type

  Max = function(x,y,z:integer):integer; stdCall;



procedure TForm1.btn1Click(Sender: TObject);

var

  temp: Integer;

  handle: THandle;

  FPointer: TFarProc;

  MyFunc: Max;

begin



  handle := LoadLibrary('ProjectMaxDll.dll');

  if handle <> 0 then

  begin

      FPointer := GetProcAddress(handle,'Max');

      if  FPointer<>nil then

      begin

        MyFunc:= Max(FPointer);

        temp:= MyFunc(1,2,3);

        ShowMessage(IntToStr(temp));

      end

      else

      begin



      end

  end

  else

    ShowMessage('');



end;

 

좋은 웹페이지 즐겨찾기