[C++] DLL 동적 로딩Language/C++2022. 9. 14. 20:51
Table of Contents
반응형
DLL 동적 로딩
특정 폴더 내에 다수의 DLL 라이브러리 파일들을 로딩하기 위한 코드입니다.
Header 파일
// dllload.h
#include <iostream>
class DLLLoad
{
public:
DLLLoad() {}
~DLLLoad() {}
bool LoadLibrary();
bool FreeLibrary();
private:
// DLL 폴더 경로를 설정합니다.
const std::string DLL_DIR;
// 로딩된 DLL 파일 경로들을 저장하고 관리합니다.
std::list<std::string> fileList;
}
C++ 파일
// dllload.cpp
#include "dllload.h"
#include <iostream>
#include <windows.h>
const std::string DLLLoad::DLL_DIR = "C:\\dll\\";
DLLLoad::DLLLoad() {}
DLLLoad::~DLLLoad() {}
// DLL 라이브러리들을 동적 로딩합니다.
bool DLLLoad::LoadLibrary()
{
// 처음 DLL 로드 이후에는 다시 로드하지 않습니다.
if (fileList.size() == 0)
{
std::string input = DLL_DIR + "*.dll";
WIN32_FIND_DATA FindData;
HANDLE hFind = FindFirstFile(input.c_str(), &FindData);
if (hFind == INVALID_HANDLE_VALUE)
{
std::cout << "Error - Can't find a file : " << FindData.cFileName << std::endl;
return false;
}
do
{
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) // 파일만 검색
{
std::string dir = CSM_DLL_DIR + FindData.cFileName;
HINSTANCE hmodule = LoadLibrary(dir.c_str());
if (hmodule != NULL) {
fileList.push_back(dir);
}
}
} while (FindNextFile(hFind, &FindData) != 0);
FindClose(hFind);
}
return true;
}
// 로딩된 DLL 라이브러리들을 해제합니다.
bool DLLLoad::FreeLibrary()
{
for (std::string file : fileList)
{
HINSTANCE hmodule = GetModuleHandle(file.c_str());
if (hmodule != NULL)
{
FreeLibrary(hmodule);
}
}
return true;
}
Main 함수
int main()
{
DLLLoad dllLoad = new DLLLoad();
dllLoad->LoadLibrary();
dllLoad->FreeLibrary();
}
반응형
'Language > C++' 카테고리의 다른 글
[C++] 평균, 표준편차 구하기 (1) | 2022.09.23 |
---|---|
[C++] Is the Point Inside the Polygon? (0) | 2022.09.23 |
[C++] string을 이용한 File Path 분리 방법 (0) | 2022.09.05 |
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!