Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[11270] Re:[질문] DLL 호출에 대한 질문입니다.
civilian,안영제 [civilian] 1790 읽음    2007-03-27 23:45
DLL 내의 함수 선언부에

function CreateChecker( ExeApplication: TApplication; ExeScreen: TScreen ):integer; stdcall;

임포트 함수 선언은

function CreateCheck( ExeApplication: TApplication; ExeScreen: TScreen ):integer; stdcall; external 'AutoUpdateCheck.dll';


단비 님이 쓰신 글 :
: DLL 및 Application을 만들고 호출하였습니다.
:
: DLL을 호출하기 위한 선언부는 다음과 같습니다.(동일한 DLL을 정적으로 혹은 동적으로 로드하기 위하여 선언하는 것입니다. 실제로는 둘중의 하나만 필요하지요.)
:
: //Static DLL 함수 선언
: function CreateCheck( ExeApplication: TApplication; ExeScreen: TScreen ):integer; external 'AutoUpdateCheck.dll' name 'CreateChecker';
: //Dynamic DLL 함수 선언
: function CreateCheck( ExeApplication: TApplication; ExeScreen: TScreen ):integer; export; stdcall; external 'AutoUpdateCheck.dll';
:
: 선언에 따른 실행 코드는 다음과 같습니다.
:
: //DLL Static Call
: procedure TfrMain.dxbtnUptCheckClick(Sender: TObject);
: var
:   iret:integer;
: begin
:   iret := CreateCheck( Application, Screen ); //업데이트 체크
: end;
:
: //DLL Dynamic Call
: procedure TfrMain.XibtnUptClick(Sender: TObject);
: var
:   ProcAddr  : FarProc;
:   DllHandle : THandle;
:   iret      : integer;
: begin
:   DllHandle := LoadLibrary('AutoUpdateCheck');
:   ProcAddr := GetProcAddress(DllHandle, 'CreateChecker');
:   if ProcAddr <> nil then
:      iret := CreateCheck( Application, Screen ); //업데이트 체크
: end;
:
: 문제는, 정적으로 로딩할때는 잘 로딩이 되며, 실행도 잘 됩니다. 그러나 메인 어플리케이션을 종료할 때, 메모리 에러를 냅니다. 아마도 메모리 해제를 잘 못해준 모양입니다.(그런데 정적으로 로드하다보니 DLL 핸들을 잡아낼 수 없어서 DLL핸들을 해제 못하겠더군요.)
:
: 그래서 동적으로 로드해 보았습니다. 그랬더니 프로시저 시작지점을 찾을 수 없답니다. 뭔가 선언을 잘못한 것 같기도 한데... 무엇을 잘못했을 까요?
:
: 다음은 DLL에서 함수 선언부입니다.
:
: {$R *.res}
:
: function CreateChecker( ExeApplication: TApplication; ExeScreen: TScreen ):integer;
: var
:   iret:integer;
:   bret:Boolean;
: begin
:   Application := ExeApplication;
:   Screen := ExeScreen;
:
:   if BasicFrm = nil then BasicFrm := TBasicFrm.Create( Application );
:   bret := BasicFrm.doCheck;
:   if bret = true then
:      iret := 1
:   else
:      iret := 0;
:
:   BasicFrm.Free;
:
:   Result := iret;
: end;
:
: exports
:   CreateChecker;
:
: begin
: end.

+ -

관련 글 리스트
11269 [질문] DLL 호출에 대한 질문입니다. 단비 1551 2007/03/27
11270     Re:[질문] DLL 호출에 대한 질문입니다. civilian,안영제 1790 2007/03/27
11271         Re:Re:[질문] DLL 호출에 대한 질문입니다. 단비 2042 2007/03/28
11272             Re:Re:Re:자답입니다. 단비 1948 2007/03/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.