[C++ DLL] Visual Studio C++ ๋ช ์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
๋ณธ๋ฌธ์ ๋ช ์์ ๋งํฌ๋ฅผ ์ฝ๊ธฐ ์ ์, ์๋ ๋งํฌ๋ฅผ ๋จผ์ ์ฝ์ด์ฃผ์ธ์.
[C++ DLL] Visual Studio C++ DLL ์์ฑํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] Visual Studio C++ ์์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
๋ช ์์ ๋งํน(Explicit Linking)
๋ช
์์ ๋งํน
์ ๋ฐํ์ ์ค ํน์ DLL์ ๋ก๋ํ์ฌ ํธ์ถํ ํจ์์ ํฌ์ธํฐ๋ฅผ ์ป์ด ํจ์๋ฅผ ํธ์ถํ๋ ๋งํฌ ๋ฐฉ์์
๋๋ค. ๋ง๋ก๋ง ๋ด์๋ ์ ์ดํด๊ฐ ์ ๋ ๊ฒ ๊ฐ์๋ฐ์. ๋ฐ๋ก ์ํ ์ฝ๋๋ก ์ค๋ช
ํ๊ฒ ์ต๋๋ค. (์ํ ์ฝ๋๋ ๋ณธ๋ฌธ์ ํ๋จ์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค.)
CreateDLL ํ๋ก์ ํธ๋ ์ฌ์น์ฐ์ฐ ํจ์๋ฅผ ์ ๊ณตํ๋ DLL์ ์์ฑํ๊ณ , MainDLL ํ๋ก์ ํธ๋ ํด๋น DLL์ ๋ช ์์ ์ผ๋ก ํธ์ถํฉ๋๋ค.
MyMath.h
์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ๋์ด ์์ต๋๋ค.
#pragma once
#ifdef CREATEDLL_EXPORTS
#define MYMATH_DECLSPEC __declspec(dllexport)
#else
#define MYMATH_DECLSPEC __declspec(dllimport)
#endif
extern "C" MYMATH_DECLSPEC double Sum(double a, double b);
extern "C" MYMATH_DECLSPEC double Sub(double a, double b);
extern "C" MYMATH_DECLSPEC double Mul(double a, double b);
extern "C" MYMATH_DECLSPEC double Div(double a, double b);
MainDLL.cpp
์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#include <Windows.h>
#include <iostream>
//#include "../CreateDLL/MyMath.h"
typedef double (*DLL_SUM)(double a, double b);
int main()
{
std::string path = "..//x64//Debug//CreateDLL.dll";
HMODULE hDll = ::LoadLibraryA(path.c_str());
if (hDll != NULL)
{
DLL_SUM pFunc = (DLL_SUM)::GetProcAddress(hDll, "Sum");
double ret = pFunc(5.0, 7.0);
std::cout << "Result: " << ret << std::endl;
::FreeLibrary(hDll);
}
}
์ฌ๊ธฐ์ ์ฃผ์๊น๊ฒ ๋ด์ผ ํ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ก, 4๋ฒ์งธ ์ค์ MyMath.h
ํ์ผ์ include
ํ๋ ๋ถ๋ถ์ด ์ฃผ์์ฒ๋ฆฌ๋์ด ์์ต๋๋ค. include ํด๋ ๋๊ณ , ์ ํด๋ ๋๋ค๋ ์๋ฏธ์ธ๋ฐ์. ๋ง์ฝ, ๊ฐ๋ฐ์๊ฐ DLL ํ์ผ๋ง ๊ฐ๊ณ ์๋ค๋ฉด DLL ํ์ผ ๋ด์ ์ด๋ค ํจ์๊ฐ ์๋์ง ๋๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ ์ธ๋์ด ์๋์ง ์ด๋ป๊ฒ ์ ์ ์์๊น์? Dependency Walker
๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ์ ์๋ ์๊ฒ ์ง๋ง, ์ฒ์๋ถํฐ ํค๋ ํ์ผ์ ์ฐธ๊ณ ํ๋ฉด ์ด๋ค ๊ฐ์ฒด๊ฐ ์ ์ธ๋์ด ์๋์ง ๋๋ ํจ์์ ์ด๋ฆ๊ณผ ๋งค๊ฐ๋ณ์, ๋ฐํํ์ ์ฝ๊ฒ ์ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ๋ก, 6๋ฒ์งธ ์ค์ typedef
์ ์ธ๋ถ๋ถ ์ธ๋ฐ์. ๋ช
์์ ๋งํฌ๋ ํจ์ ํฌ์ธํฐ๋ฅผ ๋ฐ์ ํธ์ถํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์, ํธ์ถํ๋ ค๋ ํจ์์ ์ํ์ ํจ์ ํฌ์ธํฐ ํํ๋ก ์ ์ธํด์ผ ํฉ๋๋ค. Sum
ํจ์๋ ์ธ์๋ก double
a
, double
b
๋ฅผ ๋ฐ๊ณ , double์
๋ฐํํฉ๋๋ค. ์ด์ ๋ง๊ฒ *DLL_SUM
ํจ์ ํฌ์ธํฐ ์ด๋ฆ์ typedef
ํค์๋๋ก ์ ์ธํ ๊ฒ์
๋๋ค.
๋ง์ง๋ง์ผ๋ก main()
ํจ์ ๊ตฌํ ๋ด์ฉ์
๋๋ค. LoadLibrary()
ํจ์๋ฅผ ํธ์ถํ์ฌ ํน์ ๊ฒฝ๋ก์ DLL์ ๋ถ๋ฌ์ค๊ณ , ๋ถ๋ฌ์์ง DLL ํธ๋ค์ HMODULE
๋ก ๋ฐํ๋ฉ๋๋ค. ์ ์์ ์ผ๋ก ๋ถ๋ฌ์์ง์ง ์์๋ค๋ฉด NULL์ด ๋ฐํ๋ฉ๋๋ค. NULL
์ฒดํฌ ํ GetProcAddress()
ํจ์๋ฅผ ํธ์ถํ์ฌ, DLL ํธ๋ค์์ ํน์ ํจ์ ์ด๋ฆ์ ํจ์ ํฌ์ธํฐ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ๊ฒ ๋ถ๋ฌ์์ง ํจ์ ํฌ์ธํฐ๋ฅผ ํธ์ถํ๋ฉด DLL์ ํน์ ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ผ ์ค์ํ ์ ์ FreeLibrary()
์
๋๋ค. ๋ ์ด์ DLL์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๋ฐ๋์ DLL ํธ๋ค์ ํด์ ํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก
์ฌ๊ธฐ๊น์ง ์์์ ๋งํฌ์ ๋ช ์์ ๋งํฌ์ ๋ํด ์์๋ดค์ต๋๋ค. ์ด๋ค ๋ฐฉ์์ด ๋ ํธํ์ง, ํจ์จ์ ์ธ์ง๋ ๊ฐ๋ฐ์๊ฐ ์ ํํ๊ธฐ ๋๋ฆ์ด๋ฉฐ, ์ด๋ฌํ ๋ฐฉ์๋ ๋ฐฐ์๋๋ฉด ์ค๋ฌด์์ ์ ์ฉํ๊ฒ ์จ๋จน์ ์ ์์ต๋๋ค.
๋ค์ ํฌ์คํ
์์๋ Class ๊ฐ์ฒด๋ฅผ DLL๋ก Export
ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค.
'Programming > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[C++ DLL] ํด๋์ค๋ฅผ MFC ํ์ฅ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] ํด๋์ค๋ฅผ MFC ํ์ฅ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ)
2020.12.16 -
[C++ DLL] C++ ํด๋์ค๋ฅผ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] C++ ํด๋์ค๋ฅผ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ)
2020.12.13 -
[C++ DLL] Visual Studio C++ ์์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] Visual Studio C++ ์์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
2020.12.07 -
[C++ DLL] Visual Studio C++ DLL ์์ฑํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] Visual Studio C++ DLL ์์ฑํ๊ธฐ (์์ ํฌํจ)
2020.12.04