동적으로 메모리에 로드 해서 사용하면 메모리를 적게 사용하나
빈번히 호출되고 제거 될때는 시스템의 퍼포먼스가 떨어짐,정적로드는 시스템 퍼포먼스와는 관계 없음
:
type
TfExternalFun_Dyn = class(TForm)
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fExternalFun_Dyn: TfExternalFun_Dyn;
implementation
{$R *.dfm}
procedure TfExternalFun_Dyn.BitBtn1Click(Sender: TObject);
var
iDllHND : THandle; //메모리에 로딩과 제거를 위해서 핸들값 필요
//메모리에 로드된 dll의함수를 사용하기 위해서 그 함수를 담을수 있는 변수를 선언함
// 그 변수는 반드시 해당 함수와 같은 타입이어야 됨 즉,해당 함수의 레퍼런스 변수
FunLibVar : Function (a,b:Integer): Integer;
begin
try
iDllHND := LoadLibrary('DLL_TEST\PTestDll.dll'); //해당 dll를 메모리에 로드하고 핸들값을 받음
if iDllHND >= 32 then //핸들 값이 32 이하 일때는 오류-32 이하는 시스템에서 오류로 사용
begin
@FunLibVar := GetProcAddress(iDllHND,'Sum'); //메모리에 로딩된 dll에서 Sum 이라는 함수의 주소를 가져옴
if @FunLibVar <> Nil then
ShowMessage(intTostr(FunLibVar(12,7))); //외부함수 사용
end;
finally
FreeLibrary(iDllHND); //메모리에서 해제
end;
end;
// DLL 에 있는 폼 띄우는 Procedure 호출하기
procedure TfExternalFun_Dyn.BitBtn2Click(Sender: TObject);
var
iHND : THandle;
ProcLibVar : Procedure;
begin
Try
iHND := LoadLibrary('DLL_TEST\PTestDll.dll');
@ProcLibVar := GetProcAddress(iHND,'ShowFrm'); // ShowFrm 라는 프로시져 주소 할당
if @ProcLibVar <> Nil then ProcLibVar;
finally
FreeLibrary(iHND);
end;
end;
:
출처 : codeway.co.kr
'Infomation > Tip & Tech' 카테고리의 다른 글
이클립스사용시 톰캣5.X의 JNDI DB Connection Pool 설정 (0) | 2007.12.10 |
---|---|
합계액(공급가액+부가세)에서 부가세 계산하기 (2) | 2007.11.30 |
SW기술자 노임단가 및 기술등급 (2007년도) (0) | 2007.11.26 |
DLL lib 동적 정적 라이브러리 작성 (0) | 2007.11.26 |
XHTML 일반 문법 준수 (0) | 2007.11.26 |