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);