010. Visual C++ DLL의 생성과 사용

Programming/Old 2016. 11. 18. 18:07

Qt Creator 라이브러리 생성과 사용 및 SubDir Project 생성.hwp

How to create dll and use dll at Qt suing VS2015.hwp


DLL의 생성은 크게 유용한 글은 아닌 줄은 알지만, DLL의 사용은 빈번히 발생하니 이참에 정리를 해야 한다.


솔루션과 프로젝트의 생성 

 새 프로젝트 -> Win32 콘솔 어플리케이션 생성


프로젝트 설정의 Genenral에서 Output Directory, IntermediateDircetory를 설정

필자는 각각을 아래처럼 기본으로 설정

$(SolutionDir)$(Configuration)\

$(Configuration)\


DLL 생성을 위한 소스 파일 중 header (obj.h)

#ifdef OBJ_EXPORTS
#define OBJ_API __declspec(dllexport)
#else
#define OBJ_API __declspec(dllimport)
#endif 
 
namespace Dll
{
	class Util
	{
	public:
		static OBJ_API double func();		
	};
}

DLL 생성을 위한 소스 파일 중 source (obj.cpp)

#include "stdafx.h"
#include "obj.h"
#include <stdexcept>
 
using namespace std;
 
namespace Dll
{
	double Util::add()
	{
		return 3;
	}
 
}


목적에 맞게 Debug나 Release, 플랫폼을 선택한 후 빌드

처음에 설정한 outputDirectory로 가면 dll과 lib 각각이 생성되어 있음


생성보다는 사용이 더 복잡하다.

새로운 프로젝트를 생성하자.


앞전의 프로젝트에서 처럼 프로젝트 설정의 Genenral에서 Output Directory, IntermediateDircetory를 설정한다.

사실 이 과정이 정말 필요한 과정인지는 모르겠다. 그냥 디폴트로 사용해도 될 듯? 

하지만 어느 디렉토리를 설정했든 간에 그 위치가 어디인지는 분명 기억하자. dll을 보관하는 중요한 곳이니까!!


프로젝트 설정의 C/C++ -> Additional Include Directories 에서 앞전에서 만든 obj.h 파일이 위치하는 디렉토리를 입력하자.

사용에 있어 우리는 소스의 선언을 필요로 하기 때문에 헤더는 반드시 필요하다.

 

다음에는 라이브러리를 추가하자

Linker -> General -> Additional Library Directories에서 앞전의 빌드를 통해 생성된 .lib 파일이 위치하는 디렉토리를 입력하자.

Linker -> Input -> Additional Dependencies에 생성된 lib를 추가하자.


빌드는 되겠지, 하지만 실행은 알 될꺼다. 왜냐구? dll 파일이 없으니까.

그러니까, 선언부와 정의부를 이어주는 dll 파일이 있어야 하는데 이게 없으니까 프로그램이 뻗어버리는 거다.

그래서 동적 라이브러리라고 하는 건가... 

아무튼! 어떻게 하냐구? 앞전에서 설정한 outputDirectory에다가 생성된 dll 파일을 붙여넣으면 된다. 그럼 문제 해결!


사용할 때는 소스파일 꼭대기에 생성한 헤더파일명으로 include 하면 된다~

'Programming > Old' 카테고리의 다른 글

#Natural Language Processing With Python 실습 관련  (0) 2017.07.31
011. JAVASCRIPT Session 사용 정리  (0) 2016.11.22
009. h264 이용한 pts 입력  (0) 2016.11.12
008. AV_CODEC_ID_MPEG1VIDEO  (0) 2016.11.12
007. Qt qDebug 문자열 출력  (0) 2016.11.11
admin