자갈치 님이 쓰신 글 :
: 델파이에서
: @(함수이름)과
: (함수이름) 의 차이가 뭔가요?
: 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 이렇게 해줘도 아무 문제없이 동작하지요.
|