- Linker - Windows 에서 Static Linking, Dynamic Linking 실습 1에서는 묵시적 방법으로 DLL을 호출해보았다.
하지만, 묵시적 방법은 DynamicLib_Test.lib를 사용하며, 실행파일이 로드타임시에 로드되고, 종료시에 해제된다.
따라서, dynamic 링킹의 의미를 잃지 않나 싶다 (필요할때 쓰고, 필요하지 않으면 쓰지 않는).
그러므로, 이번에는 명시적 방법으로 DLL을 호출 해보자.
Windows API가 제공하는 LoadLibrary(), GetProcAddress(), FreeLibrary()를 이용하여 명시적으로 호출하면, dll을 .lib와 관계 없이 사용가능하며, 로드시간이 아닌 실행시간중 필요할때 호출하고, 사용후 free할 수 있다.
따라서 암시적 호출에서 사용했던 header파일 include나 .lib파일을 추가 시키지 않아도 된다.
다만, dll파일을 실행파일과 같은 디렉토리에 두는것은 변함이 없다.
1. 프로젝트 속성 > C/C++ > 일반 > 추가 포함 디렉터리 > 에 "dynamic_source.h"의 디렉토리 경로 추가. (X)
2. 프로젝트 속성 > 링커 > 일반 > 추가 라이브러리 디렉터리 > 에 "DynamicLib_Test.lib"의 디렉토리 경로 추가. (X)
3. 프로젝트 속성 > 링커 > 입력 > 추가 종속성 > DynamicLib_Test.lib 추가 (X)
4. MyApp.exe이 들어있는 폴더 안에 DynamicLib_Test.dll 가져다 놓기 (0)
아래는 명시적 호출의 예시 코드 이다.
#include <iostream>
#include <Windows.h>
typedef int (*MY_FUNCTION) (int);
int main()
{
HMODULE hDll = LoadLibrary(L"DynamicLib_Test.dll");
if (hDll != NULL)
{
MY_FUNCTION my_function = (MY_FUNCTION)::GetProcAddress(hDll, "multiply_four");
std::cout << "result : " << my_function(100) << std::endl;
FreeLibrary(hDll);
}
}
결과는 실습1과 마찬가지로 400이 잘 나온다.
'컴퓨터 시스템 > Linker' 카테고리의 다른 글
Linker - Windows 에서 Static Linking, Dynamic Linking 실습 1 (0) | 2021.02.13 |
---|---|
Linker - 목적파일 (0) | 2021.02.08 |
Linker - Static Linking, Dynamic Linking (0) | 2021.01.14 |