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
'Programming > C, C++, MFC' 카테고리의 다른 글
'제약 조건과 일치하는 올바른 내보내기를 찾을 수 없습니다' 해결방법 (0) | 2017.10.16 |
---|---|
프로그램 배포시 아이콘과 MFC dll 관련 설정 (0) | 2017.06.08 |
visual studio 프로젝트 및 솔루션 이름을 변경하기. (0) | 2016.05.17 |
HTTP 프로토콜을 이용하여 웹상의 파일을 다운로드 하자. (0) | 2016.03.09 |
[Function] 폴더 내 파일 탐색 (0) | 2015.12.09 |