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

C/C++ Q/A
[3240] Re:함수포인터문의
Starlet [starlet5] 1519 읽음    2004-02-23 22:01
안녕하세요. GetProcAddress는 myDll.dll에서 AddInteger라는 함수를 찾아 그 함수의 주소를 리턴해주는 일을 합니다. 함수가 실행된다는것은 call 명령에 의해 그 함수가 위치한 메모리 주소로 점프하는 것을 말합니다. 따라서 함수도 메모리 주소값 즉, 포인터입니다.

김광수님의 코드의 제일 위에서 int형의 인자를 두개 받으며 리턴값이 int를 가진다고  int (*pFunc) (int, int) 로 함수의 형식을 선언했습니다. 앞서 설명드렸듯이 함수도 주소값이므로 *pFunc 포인터로 받습니다.
이제 GetProcAddress 함수가 호출되면 AddInteger의 위치를 찾아 그 위치에 해당하는 메모리 값을 리턴합니다. 이 리턴된 메모리 주소 값을 pFunc가 가리키게 해야 하는데 pFunc에 넣기전에 이 리턴값을 pFunc 함수의 주소라는 의미로 (int (*)(int, int))를 통해 컴파일러에게 알려주는것입니다. 복잡해 보이지만 의미는 char ch = (char) b; 와 같은 형변환입니다. 이것을 typedef를 써서 바꾸면 아래와 같이 됩니다.

typedef int _declspec(dllimport)Define_Of_pFunc(int, int);
Define_Of_pFunc *pFunc;

pFunc = (Define_Of_pFunc *) GetProcAddress(hInst, "AddInteger");

typedef를 사용한 방법을 이전에 사용했던 방법과 비교해 보시면 이해가 되실것입니다.


김광수 님이 쓰신 글 :
: int (*pFunc) (int,int);
:

:
: hInst=LoadLibrary("MyDll.dll");
:

:
: pFunc=(int (*)(int,int))GetProcAddress(hInst, "AddInteger");
:

:
: 여기서 (int (*)(int,int))  이렇게 형변환을 하는대 왜 이렇게 해줘야 되는지 궁금합니다..
:
: 참 이상해 보입니다.
:

:
: 왜 저렇게 하면 인수두개를 가지고 정수형을 가지는 함수 포인터가 반환되는지 메카니즘을 알고싶습니다.
:

+ -

관련 글 리스트
3236 함수포인터문의 김광수 1390 2004/02/22
3240     Re:함수포인터문의 Starlet 1519 2004/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.