1์ฅ. ๋ฌต์์ (์์์ ) ๋งํน์ ์ด์ด์ ์ด๋ฒ์ ๋ช ์์ ๋งํน์ ๋ํ ๋ฐ๋ผํ๊ธฐ๋ฅผ ์งํํ๋๋ก ํ๊ฒ ๋ค.
๋ช ์์ ๋งํน์ ์ด์ฉํ๋ฉด ํ์ํ ๋ DLL์์ ํจ์๋ฅผ ๋ก๋ํ์ฌ ํน์ ํจ์ ํฌ์ธํฐ์ ์ฌ์ฉํ๋ ค๋ ํจ์๋ฅผ
๋งตํ์์ผ์ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ง์ด ํ๋์ ํจ์ ํฌ์ธํฐ์ ๋ถ๋ฌ๋ค์ผ ํจ์๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉฐ ๋งตํ์ํฌ ์๋ ์๋ค.
๋ฐฑ๋ฌธ์ด ๋ถ์ฌ์ผ๊ฒฌ์ด๋ผ ํ์ผ๋ ์ฝ๋๋ฅผ ์ง์ ๋ณด๋ฉด์ ์ค๋ช ํ๊ฒ ๋ค.
์์์ 1์ฅ์์์ MakeDLLTutorial.cppํ์ผ์ '๋ง ์์ฑํ์ฌ ์๋ฌด๊ฒ๋ ์๋ ๋ฒ์ '๋ถํฐ ๋ค์ ์์๋๋ค.
http://gentlesark.tistory.com/11 ๊ธ์ 6๋ฒ ํญ๋ชฉ๊น์ง ๋ง์น๋ค 7๋ฒ ํญ๋ชฉ ๋์ ์ง๊ธ๋ถํฐ ์งํ๋๋ ์ค๋ช ์ ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ค.
mainํจ์ ๋ฐ๋ก ์๋จ์ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์.
1 2 | typedef int (*pDLLFunction)( int , int ); pDLLFunction pFunction = NULL; |
pDLLFunction์ด๋ผ๋ ํจ์ ํฌ์ธํฐ ์๋ฃํ์ ์ ์ธํ๊ณ ,
pFunction์ด๋ผ๋ ํจ์ ํฌ์ธํฐ๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ NULL๋ก ์ด๊ธฐํํ๋ค.
์ด์ ์ด pFunction์ด๋ผ๋ ํจ์ ํฌ์ธํฐ์ ์ธ๋ถ DLL์ ํจ์๋ฅผ ๋งตํ์ํฌ ๊ฒ์ด๋ค.
1 2 3 4 5 6 7 8 9 | int a = 5; int b = 10; HMODULE hMod = NULL; hMod = LoadLibraryA( "MakeDLLTutorial.dll" ); if (hMod == NULL) { printf ( "DLL Load Failed.\n" ); return 0; } |
์ด์ ๊ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก a, b๋ผ๋ ์ ์๋ฅผ ์ ์ธ ๋ฐ ๊ฐ๊ฐ 5, 10์ผ๋ก ์ ์ํ์๋ค.
์ด๋ฒ์ dll๋ฅผ ๋ด์๋ ์ ์๋ ์๋ฃํ์ธ HMODULE์ด๋ผ๋ ์๋ฃํ์ ์ด์ฉํ์ฌ hMod๋ผ๋ ๋์ ์ ์ธํ๊ณ ์ ์ํ ๋ค์
1์ฅ์์ ๋ง๋ค์ด๋์๋ MakeDLLTutorial.dll์ ๋ถ๋ฌ๋ค์ธ๋ค. ์ด ๋ ์ฌ์ฉ๋๋ ํจ์๊ฐ LoadLibraryA()๋ผ๋ ํจ์์ด๋ค.
์ด ํจ์๋ dllํ์ผ์ ๋ถ๋ฌ๋ค์ด์ง ๋ชปํ๋ ๊ฒฝ์ฐ NULL์ ๋ฆฌํดํ๋ฉฐ, ์ด ๊ฒฝ์ฐ์ ๋ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
์ด์ dllํ์ผ์ด ๋ถ๋ฌ๋ค์ฌ์ก๋ค๋ฉด, ํด๋น dllํ์ผ์์ ์ฐ๋ฆฌ๊ฐ ํธ์ถํ๊ณ ์ ํ๋ ํจ์๋ฅผ ๋ถ๋ฌ๋ค์ฌ์ผ๊ฒ ๋ค.
1์ฅ์์ ๋ง๋ค์ด ๋์๋ AddInt์ MultIntํจ์๋ฅผ ๋ถ๋ฌ๋ค์ด์.
1 2 3 4 | pFunction = (pDLLFunction)GetProcAddress(hMod, "AddInt" ); printf ( "sum = %d \n" , pFunction(a, b)); pFunction = (pDLLFunction)GetProcAddress(hMod, "MultInt" ); printf ( "mult = %d \n" , pFunction(a, b)); |
์ฒซ๋ฒ์งธ ์ค์ pFunction์ pDLLFunctionํ์ ์ ํจ์์ธ AddInt๋ผ๋ ์ด๋ฆ์ ํจ์๋ฅผ hMod๋ผ๋ dll๋ก๋ถํฐ ๋ถ๋ฌ๋ค์ธ๋ค๋ ๋ป์ผ๋ก,
๊ทธ ํจ์๋ช ์ GetProcAddress๊ฐ ๋๊ฒ ๋ค. ๋๋ฒ์งธ์ค์ ์ด ํจ์๋ฅผ ํตํด a, b๋ฅผ ๋๊ฒจ ๋ฆฌํด๋๋ ๊ฐ์ ์ถ๋ ฅํ๋ค๋ ์๋ฏธ์ด๋ค.
3, 4๋ฒ์ค๋ ๊ฑฐ์ ์ ์ฌํ ์๋ฏธ์ด๋ ์์ธํ ์ค๋ช ์ ์๋ตํ๋ค.
์์ฑ๋ ์ฝ๋์ ๋ชจ์ต์ ์๋์ ๊ฐ๋ค. ์ ๊ทธ๋ผ ์ด์ ๋๊ฐ์ด ์คํ๋๋์ง ๋ณด์. F7์ ๋๋ฌ ์คํํด๋ณด์.
์ด๋ผ ์ด์ฉ์ง ๋ฐ์ค์ด ์์ํ๋๋ผ๋ ๋น๋๊ฐ ๋์ง ์๋๋ค. ์์ผ๊น? ์๋ฌ์์ ๋ณด์ด๋๋๋ก ํด๋น ์๋ณ์๋ค์ ํฌํจํ๋ ํค๋๋ฅผ ๋ถ๋ฌ์ค์ง ์์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋ณ์๋ค์ ์ดํดํ ์ ์์๋ ๊ฒ. stdafx.h๋ฅผ ๋ถ๋ฌ๋ค์ด๋ ๋ฐ๋ก ์๋ซ์ค์ ๋ค์์ ํ์ค์ ์ถ๊ฐํ์.
1 | #include <windows.h> |
๊ทธ๋ฆฌ๊ณ ๋ค์ F7์ ๋๋ฌ ๋น๋๋ฅผ ์ํํด๋ณด์. ๋น๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋ค.
๋ฏธ๋ฆฌ ์ ์ธ๋ ํค๋๋ฅผ ๋ถ๋ฌ๋ค์ธ ์ดํ์ ๊ผญ windows.h๋ฅผ ๋ถ๋ฌ๋ค์ด๊ธธ ๋ฐ๋๋ค. ์ฃผ์ํ์.
๊ทธ๋ผ ์ด์ Ctrl+F5๋ฅผ ๋๋ฌ ์์คํ๋๋์ง ํ ์คํธ๋ฅผ ํด๋ณด์.
์ฌใ
์์ฃผ ์ ๋๋๊ตฐ.
์ด๋ก์จ ๊ธฐ๋ณธ์ ์ธ DLL ์์ฑ๊ณผ ํธ์ถํ๊ธฐ ๋ฐ๋ผํ๊ธฐ๋ ๋ง๋ฌด๋ฆฌ ๋์๋ค. ๋๋ฌด ์ฌํํ๊ฒ ํด์ ์ด๋ณด์๋ค์กฐ์ฐจ๋ ์์ฌ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
ํ์ง๋ง ์ด๋ณด์๋ค์ ์ํ ๊ฒ์ด๋๊น ํ์๋ ์ด์ ๋๋ก ๋ง์กฑํ๊ฒ ๋ค.
'IT-Engineering > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
pragma comment lib : ๋ฌต์์ (์์์ ) ๋งํน (0) | 2017.02.22 |
---|---|
DLL ๋ง๋ค๊ธฐ ๋ฐ ํธ์ถํ๊ธฐ ๋ฐ๋ผํ๊ธฐ : 1. ๋ฌต์์ (์์์ ) ๋งํน (0) | 2017.02.03 |
๋๊ธ