DLL(Dynamic Linked Library)

Similar documents
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

C 언어 프로그래밊 과제 풀이

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint Template

금오공대 컴퓨터공학전공 강의자료

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

윈도우 프로그래밍의 개념

Microsoft PowerPoint - additional01.ppt [호환 모드]

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap10-함수의활용.pptx

설계란 무엇인가?

PowerPoint Presentation

PowerPoint 프레젠테이션

윈도우 프로그래밍의 개념

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - chap06-5 [호환 모드]

PowerPoint 프레젠테이션

윈도우시스템프로그래밍

Microsoft PowerPoint - chap06-2pointer.ppt

OCW_C언어 기초

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

윈도우 프로그래밍의 개념

Microsoft PowerPoint - Chapter 6.ppt

KNK_C_05_Pointers_Arrays_structures_summary_v02

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - Java7.pptx

K&R2 Reference Manual 번역본

UI TASK & KEY EVENT

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

11장 포인터

Slide 1

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Chapter #01 Subject

PowerPoint Presentation

PowerPoint 프레젠테이션

Lab 3. 실습문제 (Single linked list)_해답.hwp

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

Microsoft PowerPoint - chap01-C언어개요.pptx

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

윈도우시스템프로그래밍

JAVA PROGRAMMING 실습 08.다형성

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint Presentation

C 프로그래밊 개요

슬라이드 1

Java ...

Chapter 4. LISTS

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

쉽게 풀어쓴 C 프로그래밍

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

JVM 메모리구조

Microsoft PowerPoint - additional06.ppt [호환 모드]

Frama-C/JESSIS 사용법 소개

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap11-포인터의활용.pptx

11장 포인터

그래픽 프로그래밍

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

C 프로그램의 기본

윤성우의 열혈 TCP/IP 소켓 프로그래밍

02장.배열과 클래스

Visual C++의 개요

PowerPoint 프레젠테이션

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Microsoft PowerPoint - es-arduino-lecture-03

PowerPoint 프레젠테이션

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

설계란 무엇인가?

윈도우시스템프로그래밍

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

설계란 무엇인가?

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

Microsoft PowerPoint - chap12-고급기능.pptx

제4장 기본 의미구조 (Basic Semantics)

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

C++ Programming

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

C++ Programming

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

ALTIBASE 사용자가이드 Templete

Microsoft PowerPoint - 07-Data Manipulation.pptx

Microsoft PowerPoint - chap05-제어문.pptx

Transcription:

제 11 장동적연결라이브러리 11.1 DLL 의링크 11.2 DLL 의종류 실습 11-1 Implicit 링킹을통한정규 DLL 달력만들기 실습 11-2 Explicit 링킹을통한정규 DLL 달력만들기 실습 11-3 확장 DLL 을통한주민등록번호조회 프로그램만들기

DLL(Dynamic Linked Library) DLL 이란? 동적연결라이브러리 프로그램내부에라이브러리가있는것이아니라따로독립적으로실행가능한파일 필요시에로드할수있는라이브러리

DLL(Dynamic Linked Library) DLL 의장점 실행파일의크기를줄일수있다 메모리를효율적으로사용할수있다. 재사용이가능하다. 커다란프로젝트를여러개의작은프로젝트로나누어작성할수있다. 새로운함수나기능추가를다시링크하지않고처리할수있다.

DLL(Dynamic Linked Library) DLL 의단점 실행파일이작아지는대신배포해야할파일의수가증가한다. 프로젝트의복잡성을증가시킬수있다. 버전관리에더욱신경을써야한다.

DLL 링크 Implicit 링킹 프로그램이시작되면서 DLL 을바로로드하는방법 Implicit 링킹을위해필요한파일 실질적으로프로그램이실행될때로드되는 DLL 파일 (*.DLL) 컴파일할때설정해주는함수명이들어있는헤더파일 (*.H) 링크할때메인프로그램에빈함수를설정하는 LIB 파일 (*.LIB)

DLL 링크 Implicit 링크에서 LIB 함수가필요한이유 메인프로그램을컴파일하고링크할때 DLL 안에들어있는함수들은메인프로그램에어느것과도링크되어있지않아실행파일을만들때에러가난다. LIB 파일에서함수를가상함수로만들어그것을 0 으로설정해주는함수가있어야링크시에러가나지않는다.

DLL 링크 Implicit 링크사용방법 ( 로드하는프로젝트와 DLL 프로젝트가별도인경우 ) 링크옵션에서사용할 DLL 파일의임포트라이브러리 (*.LIB) 를추가한다. 사용할 DLL 파일의임포트라이브러리 (*.LIB) 를프로젝트디렉터리에복사한다. 헤더파일을포함한다.

DLL 링크 Explicit 링크 Implicit 링크처럼세가지파일이필요없이단순하게 DLL 을이용하여로드하는방법 이방법으로 DLL 을로드할경우세개의함수를이용한다. LoadLibrary() 함수 GetProcAddress() 함수 FreeLibrary() 함수

DLL 링크 Explicit 링크사용방법 먼저사용하고자하는함수에대한타입을선언해야한다 Typedef int(*calenderfunc)(int num); LoadLibrary() 함수를이용하여프로그램내에서사용하고자하는 DLL 을메모리에로드한다. HINSTANCE hdll hdll = LoadLibrary( Execise.dll );

DLL 링크 Explicit 링크사용방법 ( 계속 ) DLL 에서사용할함수의메모리번지를알아오고그값을포인터로받는다. 이때익스포트되는함수의인자와반환형이일치되어야한다. CalenderFunc lpcalenderfunc; lpcalenderfunc = (CalenderFunc) GetProcAddress(hDll, Calender ); 원하는함수를호출한후더이상필요하지않을경우 FreeLibrary() 함수를이용하여메모리에서해제한다. FreeLibrary(hDll);

DLL 의종류 정규 DLL (Regular DLL) Win32 프로그램환경으로설정 표준 C 형식의인터페이스사용 함수를호출할때클래스형태의함수를호출하는것이아니라 C 형태의함수를호출 MFC 를사용하지않는비쥬얼베이직, 델파이등과도원활하게연결할수있는범용적인 DLL 이다.

DLL 의종류 정규 DLL 작성법 현재함수가 DLL 외부에서사용할수있도록함수를선언한다. extern C _desclspec(dllexport) void Calender() 함수내용을코딩할때 _desclspec(dllexport) 를함수앞에쓰고구현한다. 이렇게하고컴파일하면 DLL 파일과 LIB 파일이생성된다.

DLL 의종류 정규 DLL 사용법 함수를호출하려면다음과같이함수선언시설정해주면된다. 선언할때함수명과같아야하고 dllimport 로바꾸어주면된다. extern C _desclspec(dllimport) void Calender() DLL 함수를호출해사용하면된다.

DLL 의종류 확장 DLL (Extension DLL) MFC 전용 DLL 메인프로그램에서 DLL 을호출할때클래스로호출할수있고, MFC 구조와원활하게연결될수있는구조체로되어있다. 쉽게말해서 DLL 로생각하지않고그냥클래스사용하듯이사용하면된다. 클래스자체를 DLL 로만들고 MFC 프로그램과연결만하려면확장 DLL 을사용하는것이좋다.

DLL 의종류 확장 DLL 작성법 클래스명선언앞에단순히 AFX_EXT_CLASS 를설정한다. Class AFX_EXT_CLASS CCalenderDlg : public Cdialog 이렇게하고컴파일하면 DLL 파일과 LIB 파일이생성된다.

DLL 의종류 확장 DLL 사용법 Implicit 링킹을이용하여 LIB 파일을링크시킨다. DLL 클래스헤더파일을포함시킨다. 일반적인클래스를사용하듯이확정 DLL 클래스를사용하면된다.

실습 11-1 정규 DLL 만들기 (Implicit 링킹 ) 년도와달을넘겨주면해당되는달력이반환되는 DLL 함수를만들고메인프로그램에서이 DLL 을 Implicit 링크해보도록한다.

실습 11-1 정규 DLL 만들기 (Implicit 링킹 ) 실행

실습 11-1 프로그램작성순서 1) DLL 함수를호출할프로젝트를생성한다. Dialog Based 프로젝트를생성한다. 2) MFC DLL 프로젝트를생성한다. 첫단계에서 공유 MFC DLL 을사용하는기본 DLL 을선택한다. 3) cpp 함수에외부에서사용할함수를만든다. DLL 외부에서호출하여사용할함수와필요한변수들을선언하고초기화시킨다. extern C _desclspec(dllexport) 함수명

실습 11-1 프로그램작성순서 4) 대화상자폼에컨트롤을배치하고속성을설정한다. Edit Control, Spin Control, Combo Box 설정 5) 각컨트롤들을멤버변수에연결한다. OnDraw( ) 함수에서문자열을출력한다. 6) DLL 을호출할준비를한다. 프로젝트속성페이지에서 CalenderDll 프로젝트를참조로추가한다.

실습 11-1 프로그램작성순서 7) 각컨트롤을초기화시키고클래스에필요한멤버변수를추가한다. 8) 각컨트롤들의이벤트핸들러함수를생성한다. 9) 달력을화면에출력한다. OnPaint() 함수에서코팅해준다. 10) 프로그램을실행시킨다.

실습 11-2 정규 DLL 만들기 (Explicit 링킹 ) 년도와달을넘겨주면해당되는달력이반환되는 DLL 함수를만들고메인프로그램에서이 DLL 을 Explicit 링크해보도록한다.

실습 11-2 프로그램작성순서 1) 실습 11-1 의프로젝트를연다. 실습 11-1 프로젝트폴더를복사하여이름을변경하고프로젝트파일을연다. 2) Explicit 링킹으로 DLL 을읽어서사용한다. Implicit 링킹으로읽어왔던부분을삭제한다. OnPaint() 함수에 DLL 을읽어오는코드를추가한다. 3) 프로젝트를실행시킨다.

실습 11-3 확장 DLL 만들기 주민등록변호를입력받고확장 DLL 을이용하여주민등록번호가올바른지검사하고나이와성별을출력하는프로젝트이다.

실습 11-3 프로그램작성순서 1) DLL 함수를호출할프로젝트를생성한다. Dialog Based 프로젝트를생성한다. 2) MFC DLL 프로젝트를생성한다. 첫단계에서 MFC 확장 DLL 을선택한다. 3) 생성된 IDCheckDll 프로젝트에클래스를추가한다. 4) 외부에서주민등록번호조회에필요한함수를추가한다.

실습 11-3 5) 폼에컨트롤을배치하고속성을설정한다. Edit Control, Static Text, Button 설정 6) DLL 을호출할수있도록설정한다. 프로젝트속성페이지에서 IDCheckDll 프로젝트를참조로추가한다. [ 속성페이지 ] 대화상자에서 [ 구성속성 ]-[C/C++]- [ 일반 ] 탭을선택하여다음과같이 CJumin 클래스의헤더파일을참조하기위해디렉터리를추가한다. 7) [ 조회 ] 버튼에대해메시지핸들러함수를만든다. 8) 프로그램을실행시킨다.

연습 11-1 확장 DLL 만들기 2 차방정식근을구하는확장 DLL 을작성하고확장 DLL 을이용하여이차방정식의근을구하는프로그램을작성한다.

void CExercise11_1Dlg::OnClickedButtonCalcRoot() { CString strtemp; double fa,fb,fc, fdet; GetDlgItemText(IDC_EDIT_A,strTemp); fa = _wtof(strtemp); if (fa==0) AfxMessageBox(_T(" 첫번째계수는 0이될수없습니다.")); SetDlgItemText(IDC_EDIT_A,_T("")); SetDlgItemText(IDC_EDIT_B,_T("")); SetDlgItemText(IDC_EDIT_C,_T("")); } { else GetDlgItemText(IDC_EDIT_B,strTemp); fb = _wtof(strtemp); GetDlgItemText(IDC_EDIT_C,strTemp); fc = _wtof(strtemp); int ndet = m_calcroot.determinant(fa,fb,fc, &fdet); strtemp.format(_t("%g"),fdet); switch (ndet) { case 0:

void CExercise11_1Dlg::OnClickedButtonCalcRoot() SetDlgItemText(IDC_EDIT_RESULT,_T(" 근이없다 ")); SetDlgItemText(IDC_EDIT_DETERMINANT,strTemp); SetDlgItemText(IDC_EDIT_ROOT1,_T("")); SetDlgItemText(IDC_EDIT_ROOT2,_T("")); break; case 1: SetDlgItemText(IDC_EDIT_RESULT,_T(" 중근 ")); SetDlgItemText(IDC_EDIT_DETERMINANT,strTemp); strtemp.format(_t("%g"),m_calcroot.calcroot1(fa,fb,fc)); SetDlgItemText(IDC_EDIT_ROOT1,strTemp); strtemp.format(_t("%g"),m_calcroot.calcroot2(fa,fb,fc)); SetDlgItemText(IDC_EDIT_ROOT2,strTemp); break; case 2: SetDlgItemText(IDC_EDIT_RESULT,_T("2개의근이존재 ")); SetDlgItemText(IDC_EDIT_DETERMINANT,strTemp); strtemp.format(_t("%g"),m_calcroot.calcroot1(fa,fb,fc)); SetDlgItemText(IDC_EDIT_ROOT1,strTemp); strtemp.format(_t("%g"),m_calcroot.calcroot2(fa,fb,fc)); SetDlgItemText(IDC_EDIT_ROOT2,strTemp); break; } }

void CExercise11_1Dlg::OnClickedButtonClear() SetDlgItemText(IDC_EDIT_A,_T("")); SetDlgItemText(IDC_EDIT_B,_T("")); SetDlgItemText(IDC_EDIT_C,_T("")); SetDlgItemText(IDC_EDIT_RESULT,_T("")); SetDlgItemText(IDC_EDIT_DETERMINANT,_T("")); SetDlgItemText(IDC_EDIT_ROOT1,_T("")); SetDlgItemText(IDC_EDIT_ROOT2,_T(""));}