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
[14389] Re:간단한 질문입니다.
오랑캐꽃 [oranke] 1835 읽음    2012-07-23 11:39
자갈치 님이 쓰신 글 :
: 델파이에서
: @(함수이름)과
: (함수이름) 의 차이가 뭔가요?
: DLLProc:=@DllMain; <이것을 예를 들어 설명해주시거나 따로 예제를 들면서 설명해주시면 감사하겠습니다.

'@' 를 붙이면 해당 변수의 주소값, 이 경우는 함수의 포인터를 의미합니다.

다음과 같은 함수형 변수 타입을 선언하고

type
  TTestFunc = function (): Integer;



실제 함수를 다음과 같이 만들어준 다음에

function Test(): Integer;
begin
  Result := 1;
end;



아래와 같이 사용할 수 있습니다.

var
  TestFunc : TTestFunc;
begin
  TestFunc := @Test;
  ShowMessage(IntToStr(TestFunc));
end;



질문하신 경우는 함수포인터형 변수 DLLProc 에 DllMain 이라는 실제 함수의 주소를 넣어주는 것이죠.
이후 DLL이 프로세스에 어태치되거나 디태치될 때 DllMain 이 호출되게 되며, 이런 개념을 시쳇말로 "콜백"이라고 합니다.

여담이지만, 델파이 코드에서 함수명은 그 자체로 이미 포인터형이기 때문에 굳이 @를 안붙여도 관계없습니다.
TestFunc := Test, DLLProc := DllMain 이렇게 해줘도 아무 문제없이 동작하지요.

+ -

관련 글 리스트
14387 간단한 질문입니다. 자갈치 1736 2012/07/23
14389     Re:간단한 질문입니다. 오랑캐꽃 1835 2012/07/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.