๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT-Engineering/C++

DLL ๋งŒ๋“ค๊ธฐ ๋ฐ ํ˜ธ์ถœํ•˜๊ธฐ ๋”ฐ๋ผํ•˜๊ธฐ : 1. ๋ฌต์‹œ์ (์•”์‹œ์ ) ๋งํ‚น

by ๐Ÿงž‍โ™‚๏ธ 2017. 2. 3.
๋ฐ˜์‘ํ˜•

DLL์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?


๋™์  ๋งํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ :

๋™์  ๋งํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜์–ด: dynamic-link library, DLL)๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„์šฐ์—์„œ ๊ตฌํ˜„๋œ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๋‚ด๋ถ€์—๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ๋ถˆ๋Ÿฌ์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ํ™•์žฅDLL์ธ ๊ฒฝ์šฐ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋„ ํ•œ๋‹ค. DLL์€ COM์„ ๋‹ด๋Š” ๊ทธ๋ฆ‡์˜ ์—ญํ• ๋„ ํ•œ๋‹ค.

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,

๋ฌต์‹œ์  ๋งํ‚น(Implicit linking) : ์‹คํ–‰ ํŒŒ์ผ ์ž์ฒด์— ์–ด๋–ค DLL์˜ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ค๊ณ  ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ํ•ด๋‹น ํ•จ์ˆ˜๋“ค์„ ์ดˆ๊ธฐํ™”ํ•œ ํ›„ ๊ทธ๊ฒƒ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ,

๋ช…์‹œ์  ๋งํ‚น(Explicit linking) : ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ผ ๋•Œ API๋ฅผ ์ด์šฉํ•˜์—ฌ DLL ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ๋™์ ์œผ๋กœ ์›ํ•˜๋Š” ํ•จ์ˆ˜๋งŒ ๋ถˆ๋Ÿฌ์™€์„œ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

์ „์ž์˜ ๊ฒฝ์šฐ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ํ›„์ž์˜ ๊ฒฝ์šฐ๋Š” ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” DLL์ด๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ํ™˜๊ฒฝ์— ์žˆ์„์ง€ ์—†์„์ง€ ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค. (๋•Œ๋•Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ์„ ์œ„ํ•ด ์“ฐ์ด๊ธฐ๋„ ํ•œ๋‹ค.)

์ถœ์ฒ˜ : https://ko.wikipedia.org/wiki/๋™์ _๋งํฌ_๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


์œ„์— ์ •์˜๋œ ๋ฌต์‹œ์  ๋งํ‚น๊ณผ ๋ช…์‹œ์  ๋งํ‚น์— ๊ด€ํ•˜์—ฌ ๊ฐ๊ฐ ๋”ฐ๋ผํ•˜๊ธฐ๋ฅผ ์ œ์ž‘ํ•ด๋ณด์•˜๋‹ค.

๋จผ์ € ๋ฌต์‹œ์  ๋งํ‚น์„ ๋”ฐ๋ผํ•ด๋ณด์ž.

๋ฌต์‹œ์  ๋งํ‚น์˜ ์žฅ์ ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. ์‰ฝ๋‹ค.

2. ํŽธํ•˜๋‹ค.

๋ฐ˜๋ฉด์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๋‹ค.,

1. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„

2. ์‹œ๊ฐ„ ๋‚ญ๋น„

์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฌต์‹œ์  ๋งํ‚น์„ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•˜์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๋ช…์‹œ์  ๋งํ‚น์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

์šฐ์„  ๋”ฐ๋ผํ•˜๊ธฐ ์ฐจ์›์—์„œ๋Š” "DLL ํ˜ธ์ถœํ–ˆ๋‹ค! ์˜ฌใ…‹" ์ •๋„์˜ ์„ฑ์ทจ๊ฐ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ธฐ์— ๋” ์ด์ƒ์˜ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค.


๋ฌต์‹œ์  ๋งํ‚น ๋”ฐ๋ผํ•˜๊ธฐ

ํ•„์ž๋Š” Visual Studio 2013์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜์˜€๋‹ค. ๋„ˆ๋ฌด ์ตœ์‹ ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ๋„ˆ๋ฌด ์˜›๊ฒƒ๋„ ์•„๋‹ˆ๋ฉด์„œ vc12๋ผ 11์ดํ›„

์ถ”๊ฐ€๋œ ๋‹ค์–‘ํ•œ ๋ฌธ๋ฒ•์„ ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚˜๋ฆ„ ์ ๋‹นํ•œ ๋ฒ„์ „์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.


1. VS2013 ์‹คํ–‰

์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋–ด๋‹ค. ์ž ์ด์ œ ๋จผ์ € DLLํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž. ์œ„์— ํ•˜์ด๋ผ์ดํŠธ๋œ ์ƒˆ ํ”„๋กœ์ ํŠธ ํด๋ฆญ!


2. ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ : ํ”„๋กœ์ ํŠธ ์„ค์ • ๋ฐ ํ”„๋กœ์ ํŠธ๋ช… ์ง€์ •

์œ„์™€ ๊ฐ™์ด MakeDLLTutorial์ด๋ผ๊ณ  ์ด๋ฆ„์ง€์—ˆ๋‹ค. ํ™•์ธ์„ ๋ˆ„๋ฅด์ž.


3. ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ : ๋งˆ๋ฒ•์‚ฌ-1

๊ทธ๋ƒฅ ๋‹ค์Œ์„ ํด๋ฆญํ•˜์ž.


4. ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ : ๋งˆ๋ฒ•์‚ฌ-2 

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜์—์„œ DLL์„ ์„ ํƒํ•œ ๋’ค ๋งˆ์นจ์„ ํด๋ฆญ!


5. DLL์„ ํ†ตํ•ด ํ˜ธ์ถœ์„ ํ•  ํ•จ์ˆ˜ ์ •์˜ ๋ฐ ๋นŒ๋“œ

์ž ์ด์ œ DLL์„ ๋งŒ๋“ค ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์ด ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค. ์ด์ œ ์™ธ๋ถ€์—์„œ ๋ถˆ๋Ÿฌ๋“ค์—ฌ์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ƒฅ ๋ฌด๋‚œํ•˜๊ฒŒ ๋”ํ•˜๊ธฐ ๊ณฑํ•˜๊ธฐํ•˜๋Š” DLL์„ ๋งŒ๋“ค์–ด๋ณด์ž.

์ฒซ ํ™”๋ฉด์€ ์œ„์™€ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค. ์™ธ๋ถ€์—์„œ ๋ถˆ๋Ÿฌ๋“ค์ผ dll ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

extern "C" __declspec(dllexport) int AddInt(int a, int b)
{
  return a + b;
}

์ด ๋ฐฉ์‹์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์ž.

extern "C" __declspec(dllexport) int AddInt(int a, int b)
{
	return a + b;
}

extern "C" __declspec(dllexport) int MultInt(int a, int b)
{
	return a * b;
}

์ฒซ๋ฒˆ์งธ AddInt ํ•จ์ˆ˜๋Š” ๋‘๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๋”ํ•ด์„œ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

๋‘๋ฒˆ์งธ MultInt ํ•จ์ˆ˜๋Š” ๋‘๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๊ณฑํ•ด์„œ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

Debug/Release ๊ตฌ์„ฑ์€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ฒ ๋‹ค. ์šฐ์„  ๊ทธ๋ƒฅ Default๋Œ€๋กœ Debug๋กœ ๋นŒ๋“œ๋ฅผ ํ•ด๋ณด์ž.

F7์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ๋นŒ๋“œ-์†”๋ฃจ์…˜๋นŒ๋“œ๋ฅผ ํด๋ฆญํ•˜์ž.

๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰์—์„œ ๋‘๋ฒˆ์งธ ์ค„์— ์žˆ๋“ฏ์ด ์†”๋ฃจ์…˜ ํด๋”์˜ Output๊ฒฝ๋กœ์— dll์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ณด์ž.


6. ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ : DLL ํ˜ธ์ถœํ•  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํŒŒ์ผ-์ƒˆ๋กœ๋งŒ๋“ค๊ธฐ-ํ”„๋กœ์ ํŠธ๋ฅผ ๋ˆŒ๋Ÿฌ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž.

์ด๋ฆ„์€ CallDLLTutorial์ด๋ผ๊ณ  ์ง€์—ˆ๋‹ค. ํ™•์ธ์„ ๋ˆ„๋ฅด์ž. ์•„๊นŒ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์Œ์„ ๋ˆ„๋ฅด๊ณ ,

์ด๋ฒˆ์—” ์ฝ˜์†” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•œ๋‹ค.


7. DLL ํ˜ธ์ถœํ•˜๊ธฐ

DLL์„ ์•”์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด๋‘์–ด์•ผ ํ•œ๋‹ค.

ํ—ค๋” ํฌํ•จ๋ถ€ ๋’ค์— ์•„๋ž˜์™€ ๊ฐ™์ด ์•„๊นŒ ๋งŒ๋“  ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค. ๋ฌธ๋ฒ•์€ ๋ฌป์ง€๋„ ๋”ฐ์ง€์ง€๋„๋ง๊ณ  ์šฐ์„  ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผํ•ด๋ณด์ž.

extern "C" __declspec(dllimport) int AddInt(int, int);
extern "C" __declspec(dllimport) int MultInt(int, int);

๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ๋Š” mainํ•จ์ˆ˜ ์•ˆ์— ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜์ž.

int a = 5;
int b = 10;
printf("sum = %d \n", AddInt(a, b));
printf("mult = %d \n", MultInt(a, b));

์ž‘์„ฑํ•œ ์ตœ์ข… ๋ชจ์Šต์€ ์œ„์™€ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค. ์ž ์ด์ œ F7์„ ๋ˆŒ๋Ÿฌ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด๋ณด์ž. ๋“œ๋””์–ด DLL ํ˜ธ์ถœ์ด ๋˜๋Š”๊ฒƒ์ธ๊ฐ€? ^^?

์ด๊ฒŒ ์›ฌ๊ฑธ... ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ–ˆ๋‹ค. ์ด๊ฑด ๋ฌด์Šจ๋œป์ธ๊ฐ€???? ํ•จ์ˆ˜๋„ ์„ ์–ธํ–ˆ๊ณ  ํ˜ธ์ถœ๋„ ํ–ˆ๋Š”๋ฐ ์™œ????

์ปดํŒŒ์ผ๋Ÿฌ : "์–ด์ฉŒ๋ผ๊ณ , ํ•จ์ˆ˜๊ฐ€ ์ด๋ฆ„๋งŒ ๊ฐ€์ง€๊ณ  ๋ฌด์Šจ๋œป์ธ์ง€ ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ์•Œ์•„?"

๊ทธ๋ ‡๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•จ์ˆ˜์˜ ์‹ค์ฒด๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ด๋‹ค. ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์šฐ์„ ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ๊ฑด๋“œ๋ ค๋ณด์ž.

DLL์„ ๋นŒ๋“œํ•  ๋•Œ ๊ฐ™์€ ํด๋”์—๋Š” .lib๋ผ๋Š” ํ™•์žฅ์ž์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ์ด ๋†ˆ์„ ํ†ตํ•ด์„œ DLL์„ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์˜ฌ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ณ ๋กœ ์šฐ๋ฆฌ๋Š” libํŒŒ์ผ์„ ๋จผ์ € ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๊ณ  DLL ํŒŒ์ผ์„ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅผ ๊ฒƒ์ด๋‹ค.


8. lib ํŒŒ์ผ ์—ฐ๊ฒฐ

์ขŒ์ธก ์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ ํ”„๋กœ์ ํŠธ์— ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ์„ ํ•œ ๋’ค ์†์„ฑ์„ ํด๋ฆญํ•œ๋‹ค.

์ƒˆ๋กœ ๋œฌ ์ฐฝ์—์„œ VC++๋””๋ ‰ํ„ฐ๋ฆฌ - ์ผ๋ฐ˜ - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ์˜†์— ํ™”์‚ดํ‘œ๋ฅผ ํด๋ฆญํ•˜๊ณ  ํŽธ์ง‘์„ ํด๋ฆญํ•œ๋‹ค.

์•„๊นŒ MakeDLLTutorial์—์„œ ์ถœ๋ ฅํ•œ ํด๋”์ธ Debugํด๋”๋ฅผ ํฌํ•จ์‹œํ‚จ๋‹ค.

์ด ์ž‘์—…์€ ์•ž์œผ๋กœ libํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ๋“ค์ผ๋•Œ ๊ฒฝ๋กœ ์ง€์ •์—†์ด๋„ ์•Œ์•„์„œ ์ € ํฌํ•จ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค๋Š” ๋œป์ด ๋˜๊ฒ ๋‹ค.

ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์„œ ์ฐฝ์„ ๋‹ซ๊ณ , ๋‹ค์Œ์€ ๊ตฌ์„ฑ ์†์„ฑ - ๋ง์ปค - ์ž…๋ ฅ - ์ถ”๊ฐ€ ์ข…์†์„ฑ์— ์šฐ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•˜๋Š” libํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์•„๊นŒ ๋งŒ๋“ค์–ด ๋‘์—ˆ๋˜ MakeDLLTutorial.lib ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ํ™•์ธ ๋˜ ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์„œ ์†์„ฑ ์ฐฝ์„ ๋‹ซ์ž.

๋‹ค์‹œ ํ•œ๋ฒˆ ๋นŒ๋“œ์— ๋„์ „! F7์„ ๋ˆ„๋ฅด์ž.

์šฐ์™€... ๋“œ๋””์–ด ๋นŒ๋“œ์— ์„ฑ๊ณตํ–ˆ๋‹ค. ์ž ๊ทธ๋Ÿผ Ctrl+F5๋ฅผ ๋ˆŒ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด๋ณผ๊นŒ?^^

์‹œ์Šคํ…œ ์˜ค๋ฅ˜๊ฐ€ ๋‘๋‘ฅ... ์–ด๋””์„œ ๋งŽ์ด ๋ณด๋˜ ํ™”๋ฉด๊ฐ™๋‹ค...

๊ทธ๋ ‡๋‹ค. ์šฐ๋ฆฌ๋Š” lib์„ ํ†ตํ•ด ์ด์ œ ํ•จ์ˆ˜๋ฅผ ์•Œ์•„๋จน์„ ์ˆ˜ ์žˆ๊ฒŒ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ์—ˆ์œผ๋‚˜, ์‹ค์ œ ํ•จ์ˆ˜์˜ ์‹ค์ฒด์ธ dll์€ exeํŒŒ์ผ ์ž…์žฅ์—์„ 

๋„๋ฌด์ง€ ์–ด๋””์žˆ๋Š”์ง€ ์•Œ๋„๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค. 

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์•Œ๊ฒŒํ•ด์ค„๊นŒ?

๊ฐ€์žฅ ์‰ฌ์šด๋ฐฉ๋ฒ•์€ ์‹คํ–‰ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ์— dllํŒŒ์ผ์„ ์ง‘์–ด ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ์‹คํ–‰ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ ๊ฒฝ๋กœ์— ์•„๊นŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋”๋ฅผ

์—ฐ๊ฒฐ์‹œํ‚ฌ ๋•Œ ๋„ฃ์—ˆ๋˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€์„œ ๋งŒ๋“ค์–ด์ง„ dll ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์—ฌ exeํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ์— ๋„ฃ์–ด๋ณด์ž.

ํ•„์ž์˜ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ๋ณต์‚ฌํ•ด๋‘์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œํ•œ๋ฒˆ Visual Studio๋กœ ๋Œ์•„์™€์„œ Ctrl+F5๋ฅผ ๋ˆ„๋ฅด์ž.

๋“œ๋””์–ด ์„ฑ๊ณตํ–ˆ๋‹ค...

์šฐ์„  ์—ฌ๊ธฐ๊นŒ์ง€๋กœ ๋ฌต์‹œ์  ๋งํ‚น์„ ํ†ตํ•œ DLL ๋งŒ๋“ค๊ธฐ ๋ฐ ํ˜ธ์ถœํ•˜๊ธฐ๋Š” ์„ฑ๊ณตํ•˜์˜€๋‹ค.


๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ์•„๋ž˜ ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

extern "C" __declspec(dllexport) int AddInt(int a, int b)
{
  return a + b;
}

๋จผ์ € extern "C"๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•จ์ˆ˜๋ช…์€ ๋„ค์ž„ ๋งน๊ธ€๋ง(Name Mangling)์ด๋ž€ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ณ€ํ˜•๋˜๋Š”๋ฐ, ์ปดํŒŒ์ผ๋Ÿฌ๋งˆ๋‹ค ๊ทœ์น™์ด ๋‹ฌ๋ผ ์ด๋ฆ„์„ ํ†ตํ•ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. C++์˜ ๊ฒฝ์šฐ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋„ค์ž„ ๋งน๊ธ€๋ง์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ฆ‰, extern "C"๋Š” 'C ํ˜•์‹์œผ๋กœ ํ•จ์ˆ˜ symbol์„ ๋งŒ๋“ค์–ด ๋‹ฌ๋ผ'๋Š” ๋œป์œผ๋กœ, ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋„ค์ž„ ๋งน๊ธ€๋ง์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฌธ์ œ์—†์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ์กฐ : http://spikez.tistory.com/19

๋‹ค์Œ์œผ๋กœ __declspec(dllexport)๋Š” ๋ฌด์—‡์ธ๊ฐ€?

__declspec์€ ํ•จ์ˆ˜์˜ ํŠน์„ฑ์„ ์ง€์ •ํ•˜๋Š” ๊ตฌ๋ฌธ์œผ๋กœ ์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ๋‚œํ•ดํ•œ ์ ์ด ์žˆ์–ด ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ์ฐธ์กฐ๋ฐ”๋ž€๋‹ค. declspec์ด ์•„๋งˆ declare specification์ผ ๊ฒƒ ๊ฐ™์•„ ๋Œ€๋žต์ ์ธ ๋œป์€ ๊ฐ€๋Š ์ด ๊ฐ„๋‹ค. ํŠน์„ฑ์„ ์„ ์–ธํ•œ๋‹ค. ์ฆ‰, dllexport์šฉ ํ•จ์ˆ˜๋ผ๋Š” ํŠน์„ฑ์„ ์„ ์–ธํ•œ๋‹ค๋Š” ๋œป์ด ๋˜๊ฒ ๋‹ค.

์ฐธ์กฐ : https://msdn.microsoft.com/ko-kr/library/dabb5z75.aspx

๊ทธ ๋’ค์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ C/C++์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ์„ค๋ช…์€ ์ƒ๋žตํ•˜๊ฒ ๋‹ค.


๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ช…์‹œ์  ๋งํ‚น์œผ๋กœ ๋Œ์•„์˜ค๊ฒ ๋‹ค.

๊ทธ๋Ÿผ ์ด๋งŒ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€