본문 바로가기

Programming/C++, MFC

C++, MFC。DLL 생성 및 적용

728x90
반응형

1. DLL 프로젝트 생성

 

▶ Visual Studio 2008 DLL 예제

 

 


# 공유 MFC DLL을 사용하는 기본 DLL

파일 용량은 작으나 MFC 관련 DLL 모두 배포해야 사용 가능

 

# MFC를 정적으로 링크한 기본 DLL

파일 용량이 커지지만 독립적 실행 가능

 

# MFC 확장 DLL

MFC 실행 파일만 사용 가능

 

2. DLL 소스 코드

# Message.h 헤더 생성

 

#pragma once

#ifdef DLL_EXPORT
#define SEARCH_DLLAPI __declspec(dllexport)
#else
#define SEARCH_DLLAPI __declspec(dllimport)
#endif

extern "C"
{
    SEARCH_DLLAPI const void _ShowMessage(const char* pData);
}

 

# Message.cpp 생성

 

#include "StdAfx.h"

#define DLL_EXPORT

#include "Message.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

const void _ShowMessage(const char* pData)
{
    CString sData(pData);

    AfxMessageBox(sData);
}

 

 

3. 실행 프로젝트 적용

# 명시적 연결(Explicit Linking)

 

typedef char* (__cdecl *_ShowMessageFunc)(char* pData);

_ShowMessageFunc m_smBox;

void CMFCMainDlg::OnBnClickedOk()
{
    // DLL 로드
    HMODULE hModule = ::LoadLibraryA("DLL_240416.dll");
    if (hModule == NULL) return;

    // DLL 함수의 주소 검색
    m_smBox = (_ShowMessageFunc)::GetProcAddress(hModule, "_ShowMessage");

    // 함수 실행
    m_smBox("메시지 출력!!!");

    FreeLibrary(hModule);

    CDialogEx::OnOK();
}

 

▶ DLL_240416 프로젝트를 MFC_DLL2008로 명칭만 변경한 예제

 

4. 프로젝트 속성

# MFC 사용

 

 

# 전처리기 정의
_AFXDLL  : 공유 MFC DLL을 사용하는 기본 DLL 임을 의미
_USRDLL : MFC를 정적으로 링크한 기본 DLL 임을 의미

_AFXEXT  : MFC 확장 DLL 임을 의미

 

 

# 런타임 라이브러리

MD(Multi-Threaded DLL) : CRT 라이브러리를 DLL로 제공
MT(Multi-Threaded) : CRT 라이브러리를 정적으로 연결하여 제공

 

728x90
반응형