Programming/C, C++, MFC
class를 포함한 dll 만들기 ( 클래스 동적 라이브러리 )
매직블럭
2016. 5. 17. 20:05
dll을 만들어야 할 상황에서 일반적으로는 함수를 만드는 경우가 대부분이지만
클래스 자체를 포함하는 dll을 만들어야 할 경우가 있다.
이런 경우 클래스를 포함하는 dll을 만드는 방법에 대한 정리.
필요로 하는 클래스가 선언 및 정의 된 Class.cpp 와 Class.h 가 있고
이녀석을 감싸기 위한 ClassDLL.cpp 와 ClassDLL.h 를 준비하자.
< Class.h >
- #pragma once
- class Source
- {
- public:
- int add(int a, int b);
- int mul(int a, int b);
- };
< Class.cpp >
- #include "Class.h"
- int Source::add(int a, int b)
- {
- return a + b;
- }
- int Source::mul(int a, int b)
- {
- return a*b;
- }
이제 이녀석을 감싸기 위한 ClassDLL.cpp와 ClassDLL.h를 만들자.
< ClassDLL.h >
- #ifdef DLLEXPORT
- #define MYDLLTYPE __declspec(dllexport)
- #else
- #define MYDLLTYPE __declspec(dllimport)
- #endif
- typedef void* pSource;
- extern "C" MYDLLTYPE SourceConstruct();
- extern "C" MYDLLTYPE int SourceAdd(pSource money, int a, int b);
- extern "C" MYDLLTYPE int SourceMul(pSource money, int a, int b);
- extern "C" MYDLLTYPE void SourceDestruct(pSource money);
< ClassDLL.cpp >
- #define DLLEXPORT
- #include "ClassDLL.h"
- extern "C" MYDLLTYPE pSource SourceConstruct()
- {
- Source* source = new Source();
- return (pSource)source;
- }
- extern "C" MYDLLTYPE int SourceAdd(pSource source, int a, int b)
- {
- Source* source = (Source*)source;
- return source->add(a, b);
- }
- extern "C" MYDLLTYPE int SourceMul(pSource source, int a, int b)
- {
- Source* source = (Source*)source;
- return source->mul(a, b);
- }
- extern "C" MYDLLTYPE void SourceDestruct(pSource source)
- {
- Source* source = (Source*)source;
- delete source ;
- }
이렇게 만들어 주고 빌드하면 lib 와 dll 이 생성 되겠지..
이놈들을 사용할때는 아래와 같이 사용한다.
- #include <stdio.h>
- #include "ClassDLL.h"
- #pragma comment(lib, "ClassDLL.lib")
- void main()
- {
- pSource source = SourceConstruct();
- const int a = 2, b = 3;
- printf("%d + %d = %d\n", a, b, SourceAdd(source, a, b));
- printf("%d * %d = %d\n", a, b, SourceMul(source, a, b));
- SourceDestruct(source);
- }
나중에 쓸 일이 있을 것 같아서 정리.
참고 : http://egloos.zum.com/tain68/v/10421967