class로 작성된 DLL 사용방법

Class를 아무런 생각없이 DLL(dynamic link library )로 만들어버렸다.. -_-;;

다만들고 나서 사용할려고 보니 막막한것... T^T

 

이리저리 뒤지고 뒤지다 알아낸 방법이다.

 

대략 방법은 예를 들어 설명하면

사용할 클래스 이름을 CMy이라 하면

 

///////////////////////////////////////////////////////////////////////////////////////

- dll class header

 

class CMy
{
public:
 CMy();        // 생성자
 ~CMy();        // 파괴자:연결 핸들을 해제한다.

 

//사용할 함수들....

 BOOL Connect(int Type, char *ConStr, char *UID=NULL, char *PWD=NULL);
 BOOL Exec();

 ..... 중략
 void WriteBlob(LPCTSTR szSQL, void *buf, int size);
};

 

// In dll
// 클래스를 생성하여 리턴해 주는 역활을 한다. 이것이 핵심인듯 리턴값으로 클래스를 통째로 넘겨줘버린다. ㅡ.ㅡ;;
extern "C" __declspec(dllexport) CQuery* CreateCMy()
{
        return new CMy();
}

위와 같은 형식의 #include할 클래스헤더파일을 virtual로 하나 만든다.

///////////////////////////////////////////////////////////////////////////////////////

- dll class header

 

class CMy
{
public:
 CMy();        // 생성자
 virtual ~CMy();        // 파괴자:연결 핸들을 해제한다.

 

//사용할 함수들....

 virtual BOOL Connect(int Type, char *ConStr, char *UID=NULL, char *PWD=NULL);
 virtual BOOL Exec();

 ..... 중략
 virtual void WriteBlob(LPCTSTR szSQL, void *buf, int size);
};

 

이때는 dllexport 는 사용하지 않는다. 단순 클래스내에서 사용될 함수들만 선언되어있으면 된다.

이제 준비는 다되었고 실제 사용하는 방법은 아래와 같다.

 

#include "My.h"                //include에 사용하기 위해 만든헤더 선언.

 

... 중략

 

HINSTANCE hInst;

hInst = LoadLibrary ("dll"); //dll을 로드 한다.

 

// 클래스 포인터 타입 지정
typedef CMy* (*PFNCreateMy)();
 
// DLL 에서 함수 읽어옴
PFNCreateSQL pfnCreateMy = (PFNCreateMy)GetProcAddress(hInst, TEXT"CreateCMy"));
 
// 클래스 생성 함수 호출 CMMy로 클래스를 생성하였다. 이제 보통 클래스쓰듯이 쓰면된다.
CMy* CMMy = (pfnCreateMy)();

//이러케.......
CMMy ->Exec();

 

//종료시 반드시 delete와 FreeLibrary해주는 Sense... 잊지말자...

delete CMMy ;
FreeLibrary(hInst);

위로 스크롤