'DLL'에 해당되는 글 1건

완전 AStar를 탄금에 적용 시킬려니깐 이만저만삼만사만-_-;
갑자기 DLL링크 시키는게 튀어 나와서 처음 보는 코드에 당황했다.
그래서 오늘 세벽엔 DLL에 대해서 정리도 하고 AI구현도 계속 해 봅니다.

1. DLL
그러니깐 DLL(다이나믹-링크-라이브러리)이 무엇인고 하니 동적으로 프로그램에 링크되는 라이브러리라 하겠다. 동적으로 링크되니깐 DLL을 하나만 만들어 놓고 메모리에 탑재 후 여기 저기 프로세스에서 가져다 사용할 수 있다는 얘기가 되겠다. SDK 라이브러리로 작성 되어 있다면 C++에서 Visual Basic으로 가져가 사용할 수 있다고 한다. 왜냐고?

2. DLL링크
DLL을 링크하는 방법은 2가지가 있습니다. Im뭐시기랑..Ex뭐시기가 있습니다.

Im뭐시기 - 프로그램이 시작되면서 해당 DLL을 바로 로드하는 방법입니다. DLL에는 해당 모듈이 기록되어 있답니다. 함수명만 있고 해당 인자는 없기 때문에 DLL과 함께 .h파일과 LIB파일이 필요합니다. DLL이 동적링큰데 왜 필요하냐면 DLL안에 있는 함수는 메인프로그램과 연결 시켜주는 거라 이해합시다.

ex) PaintImage(LPSTR filename)이라는 함수를 DLL로 만들고 메인 프로그램 헤더에 extern "C"__declspec(dllimport)void PaintImage(LPSTR filename); 이라고 정의하고 void PaintImage(LPSTR filename) = 0 이라고 가상함수를 만들어준다. 이렇게 만들어진 함수가 컴파일되어 LIB로 만들어 진다. 이것을 메인 프로그램에 링크 시키면된다는것.

DLL은 실질적으로 프로그램이 실행될때 로드되는 파일, H는 컴파일할 때 설정해 주는 함수명이 들어있는 파일, LIB는 링크시킬 때 메인프로그램에 빈함수를 설정해주는것. 이라고 보면되겠다.

Ex뭐시기 - 바로 이 Im뭐시기 때문에 애먹고 있다. 3가지의 파일이 필요하지 않고 단순하게 DLL을 로드하는 방법이다. 이 방법으로 링크시에 3개의 함수가 필요합니다.

ex) HINSTANCE hdll = LoadLibrary("standard.dll"); 이 인스턴스 핸들로 함수포인터를 찾습니다. 예를 들어 standard.dll에 PathFinder()함수가 있다면 다음과 같이 할 수 있습니다요.
LPFNDLLFUNC func = (LPFNDLLFUNC)GetProcAddress(hdll, "PathFinder");
이렇게 리턴된 func()을 실행하면 DLL의 해당 파일과 동일한 결과를 얻습니다. 그리고 DLL사용이 종료되면 FreeLibrary(hdll);로 해제합니다.

간단하군하. 이렇게 하면 두 개의 동일한 DLL을 사용하는 경우 하나의 프로그램이 종료된 시점에 효율적으로 쓸수 있다요.

3. DLL 사용하기
정규 DLL  MFC lib와 연계 - extern "C"__declspec(dllexport) void PathFinder()
(C++에서도 PathFinder()함수를 사용할 수 있도록 이 함수는 본 DLL에서 어떤 메인프로그램이 호출할 때 실행되도록 하라.)
정규 DLL MFC dll과 연계 - extern "C"__declspec(dllimport) void PathFinder()
확장 DLL - class AFX_EXT_CLASS CMyDlg : public CObject라고 하면 다음 헤더를 메인프로그램에 설정해준 다음 CMyDlg를 내부 프로그램에서 사용하는 클래스처럼 이용하면 된다.

일단 이 정도만 정리하면 에러 잡을 수 있을것이다. 이곳을 통해서 정보를 접했습니다. 자료 출처는 삼육대학교 이상엽 박사님 이라고 합니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

'직업에 관한 관심 > 탄금 프로젝트' 카테고리의 다른 글

D-Day일? 게임 완성일.  (1) 2007/12/18
게임에서 계단 오르내리기.  (0) 2007/10/14
선형보간 공식. 자꾸 까먹어.  (0) 2007/10/14
CEGUI 파일 분석  (0) 2007/10/11
프로젝트 "탄금"  (2) 2007/10/01
DLL을 이용한 프로그래밍  (0) 2007/09/27
TAG