• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

class를 포함한 dll 만들기 ( 클래스 동적 라이브러리 )

Programming/C, C++, MFC 2016. 5. 17. 20:05




dll을 만들어야 할 상황에서 일반적으로는 함수를 만드는 경우가 대부분이지만 


클래스 자체를 포함하는 dll을 만들어야 할 경우가 있다.


이런 경우 클래스를 포함하는 dll을 만드는 방법에 대한 정리.



필요로 하는 클래스가 선언 및 정의 된 Class.cpp 와 Class.h 가 있고

이녀석을 감싸기 위한 ClassDLL.cpp 와 ClassDLL.h 를 준비하자.


< Class.h >

  1. #pragma once
  2.  
  3. class Source
  4. {
  5. public:
  6. int add(int a, int b);
  7. int mul(int a, int b);
  8. };


< Class.cpp >

  1. #include "Class.h"
  2.  
  3. int Source::add(int a, int b)
  4. {
  5.   return a + b;
  6. }
  7.  
  8. int Source::mul(int a, int b)
  9. {
  10.   return a*b;
  11. }



이제 이녀석을 감싸기 위한 ClassDLL.cpp와 ClassDLL.h를 만들자.


< ClassDLL.h >

  1. #ifdef DLLEXPORT
  2. #define MYDLLTYPE __declspec(dllexport)
  3. #else
  4. #define MYDLLTYPE __declspec(dllimport)
  5. #endif
  6.  
  7. typedef void* pSource;
  8.  
  9. extern "C" MYDLLTYPE SourceConstruct();
  10. extern "C" MYDLLTYPE int SourceAdd(pSource money, int a, int b);
  11. extern "C" MYDLLTYPE int SourceMul(pSource money, int a, int b);
  12. extern "C" MYDLLTYPE void SourceDestruct(pSource money);


< ClassDLL.cpp >

  1. #define DLLEXPORT
  2. #include "ClassDLL.h"
  3.  
  4. extern "C" MYDLLTYPE pSource SourceConstruct()
  5. {
  6.   Source* source = new Source();
  7.   return (pSource)source;
  8. }
  9.  
  10. extern "C" MYDLLTYPE int SourceAdd(pSource source, int a, int b)
  11. {
  12.   Source* source = (Source*)source;
  13.   return source->add(a, b);
  14. }
  15.  
  16. extern "C" MYDLLTYPE int SourceMul(pSource source, int a, int b)
  17. {
  18.   Source* source = (Source*)source;
  19.   return source->mul(a, b);
  20. }
  21.  
  22. extern "C" MYDLLTYPE void SourceDestruct(pSource source)
  23. {
  24.   Source* source = (Source*)source;
  25.   delete source ;
  26. }



이렇게 만들어 주고 빌드하면 lib 와 dll 이 생성 되겠지..


이놈들을 사용할때는 아래와 같이 사용한다.

  1. #include <stdio.h>
  2. #include "ClassDLL.h"
  3.  
  4. #pragma comment(lib, "ClassDLL.lib")
  5.  
  6. void main()
  7. {
  8.   pSource source = SourceConstruct();
  9.  
  10.   const int a = 2, b = 3;
  11.   printf("%d + %d = %d\n", a, b, SourceAdd(source, a, b));
  12.   printf("%d * %d = %d\n", a, b, SourceMul(source, a, b));
  13.  
  14.   SourceDestruct(source);
  15. }



나중에 쓸 일이 있을 것 같아서 정리.




참고 : 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
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

카테고리

  • 살다보니.. (449)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (147)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (58)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (8)
    • 전공관련 (80)
      • Algorithm (6)
      • Deep Learning (54)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (8)
    • Computer (118)
      • Utility (21)
      • Windows (31)
      • Mac (4)
      • Ubuntu, Linux (58)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • matlab
  • ColorMeRad
  • 갤럭시노트3
  • CStdioFile
  • 매트랩 함수
  • 일본
  • 딥러닝
  • DeepLearning
  • Convolutional Neural Networks
  • Computer Tip
  • SVM
  • 에누리닷컴
  • matlab function
  • 오봉자싸롱
  • 매트랩
  • 스마트체험단
  • Deep Learning
  • DSLR
  • 크롬
  • 후쿠오카
  • portugal
  • LIBSVM
  • 큐슈
  • function
  • 포르투갈
  • random variable
  • utility
  • ReadString
  • review
  • 칼로리 대폭발

달력

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
05-30 05:10

LATEST FROM OUR BLOG

RSS 구독하기

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바