본문 바로가기
프로그래밍/C++

[c++] DLL 연결 및 사용방법

by 건우아빠유리남편 2009. 12. 2.
반응형
지금 하려는 이야기는 DLL을 완성하고 난 다음부터의 이야기이다.
[DLL의 개념]
우선 기본적인 개념정리는
DLL은 Dynamic Link Library 이다. 즉 혼자 독립적으로 존재하다가 프로그램이 실행될 때 동적으로 링크되어 사용되기때문에 동적 링크 라이브러리인것이다.
반대로 정적링크 라이브러리(Static Link Library)도 존재 한다. 예를 들면 strlen()이라는 함수나 그 외에 정의하지도 않았는데 사용하는 것들이다. 이런것들은 시작시 항시 참조 되는 라이브러리이기 때문에 정적 링크 라이브러리라고 불르는것이다.
동적 링크 라이브러리의 장점은
1. 메모리와 하드디스크를 절약할 수 있다.
2. 프로그램 실행 속도가 빨라질 수 있다.
3. 프로그램이 모듈화 된다.

[DLL의 종류]
1. 일반 DLL
 일반 DLL은 c++뿐만 아니라 다른 프로그래밍언어에서도 호환되는 범용적인 DLL을 말한다. 하지만 이렇게 범용적인 DLL을 만드는 대신 제약이 따른다. 그 제약은 모두 C 함수 형태로 만들어져야 한다는 것이다. 따라서 클래스나 오버로딩 된... c++ Style의 코드는 DLL 내부에선 상관없지만 외부인 다른프로젝트에선 참조 하지 못한다.
따라서 일반DLL은 다음과 같은 형태로 사용된다.
extern "c" __declspec(dllexport) void Nyaonge()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//To do...
}

2. 익스텐션 DLL
C++ 문법의 모든 거시기를 사용하여 만든 DLL이다. 역시 C++에서만 참조가 가능하다. 작은 프로젝트라면... 상관없겠지..

[DLL 사용 방법]
완성된 DLL을 사용하려는 쪽에서 라이브러리 참조를 해 준후..
DLL쪽에선 노출시킬 함수를 정의한다.

 - 요런식..
extern "c" __declspec(dllexport) void Nyaonge()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
mNyaonge();            DLL에서 불러질 함수
}

사용하려는 쪽에서는 해당 DLL을 사용할 Handle형 변수를 선언하고 (함수 포인터인 셈) LoadLibrary()함수를 이용해 DLL의
위치(주소)를 읽어온다.
DLL안에서 선언된 C Style의 함수를 사용하기 위해 편한대로 함수포인터를 선언하고 GetProcAddress()함수를 이용해 주소를 저장한다.
typedef void (*FuncNyaonge)();         //함수포인터 재정의
FuncNyaonge funcNyaonge;         //함수포인터 선언
~~~~~~~~~~~~~~~~~~
사용 예) funcNyaonge = (FuncNyaonge) GetProcAddress(NyaongDll, "Nyaonge") //첫번째 인자 : DLL이름
//두번째 인자 : DLL안의 함수이름(이름이 틀리면 잡기 힘들어진다.)
 
글구 사용~
ex) funcNyaonge();


다 쓰고 종료될 때 FreeLibrary()함수를 이용해 해제해 준다.
ex) FreeLibrary(NyaongDLL);






반응형

'프로그래밍 > C++' 카테고리의 다른 글

[c++] 컴파일시 주소지정에 대한 생각  (0) 2009.12.03
전처리기에 대하여  (0) 2009.12.02
구조체(struct)와 공용체(union)  (0) 2009.12.02
트리컨트롤(TreeCtrl) 사용법 종합  (0) 2009.11.08
MFC Tree Control  (0) 2009.11.06

댓글