implicit load time linking DLL

윈도우즈에서 암시적 링크  DLL을 테스트 해 보자.
Visual Studio 2017 버전으로 작업 하였다.

우선 프로젝트를 간단하게 만든다.

1. EXE 프로젝트 만들기 :
MyTest로 콘솔 응용 프로그램 만들기

2. DLL 프로젝트 만들기:
같은 솔루션에서 파일 > 추가 > 프로젝트 > DLL(동적 연결 라이브러리) > MyDll 프로젝트 생성

MyDll 소스

MyDll.h
#ifndef _MYDLL_H
#define _MYDLL_H

#ifdef MYDLL_EXPORT
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

namespace DLLTEST
{
    const float rate = 2.0f;

    class MYDLL_API MyDll
    {
       
    public:
        float Add(float l, float r);
        float Sub(float l, float r);
    };
}

#endif

MyDll.cpp
#include "stdafx.h"
#include "MyDll.h"

namespace DLLTEST
{
    float MyDll::Add(float l, float r)
    {
        return (l + r);
    }

    float MyDll::Sub(float l, float r)
    {
        return (l - r);
    }
}

MyTest 소스

#include "stdafx.h"
#include "../MyDll/MyDll.h"

int main()
{
    DLLTEST::MyDll my;

    float v1 = my.Add(2, 10);
    float v2 = my.Sub(10, 90);

    printf("Dll Test %f, %f", v1, v2);
    return 0;
}

MyDll 프로젝트 속성 수정

#define MYDLL_API __declspec(dllexport)

위의 dllexport 선언을 활성화 하기 위해 "전처리기 정의" MYDLL_EXPORT를 입력한다.

구성 속성 > C/C++ > 전처리기 정의



MyTest 속성 수정


1. "추가 라이브러리 디렉토리"에 라이브러리가 있는 위치를 지정한다.

구성 속성 > 링크 > 일반 > 추가 라이브러리 디렉토리



$(SolutionDir)$(Platform)\$(Configuration)\ 의 위치는 여기서 MyTest\x64\Debug 이다.
MyDll의 DLL과 라이브러리는 디폴트로 위 디렉토리로 복사 된다.

2. "추가 종속성"에 MyDll.lib 라이브러리를 추가한다.

구성 속성 > 링커 > 입력 > 추가 종속성



이상태에서 빌드 하면 프로젝트의 추가 순서에 따라 다음의 에러가 발생 할수도 있다.



프로젝트 종속성 문제로 라이브러리를 찾지 못하는 문제가 발생 했다.
MyTest 프로젝트 먼저 빌드 되기 때문에 MyDll.lib 파일을 찾지 못하기 때문이다.

3.  프로젝트에서 프로젝트 종속성  대화 상자를 열어 MyDll을 지정해준다.





빌드 완료.....

참조)
http://fa11enprince.hatenablog.com/entry/2014/06/20/015808