๐Ÿ•ท๏ธ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 103 (from laksa090)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

โ„น๏ธ Skipped - page is already crawled

๐Ÿ“„
INDEXABLE
โœ…
CRAWLED
4 hours ago
๐Ÿค–
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH0 months ago
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/
Last Crawled2026-04-08 17:07:57 (4 hours ago)
First Indexed2023-08-24 01:42:52 (2 years ago)
HTTP Status Code200
Meta TitleC++/CLI ๊ฐ•์ขŒ: ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ฐ”๊พธ๊ธฐ โ€“ ์•ˆ๋“œ๋กœ๋ฉ”๋‹ค ํ† ๋ผ
Meta Descriptionnull
Meta Canonicalnull
Boilerpipe Text
์ตœ์žฌํ›ˆ | SK ์•„์ด๋ฏธ๋””์–ด์˜ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํŒ€์—์„œ ์ผํ•œ๋‹ค. ์š”์ฆ˜์€ ์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์ „๋…ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋„์ „์„ ์ฆ๊ธด๋‹ค. ์ง์—… ์™ธ์ ์ธ ์ธก๋ฉด์—์„  ๋ฐฐ์ฒ ์ˆ˜์˜ ์Œ์•… ์บ ํ”„๋ฅผ 15๋…„์งธ ์ฆ๊ฒจ ๋“ฃ๊ณ , U2๊ฐ€ ์ตœ๊ณ ์˜ ๋ฐด๋“œ๋ผ ์ƒ๊ฐํ•œ๋‹ค. C++/CLI๋ฅผ ๋‹ค๋ฃจ๋ฉด ๋‚œํ•ดํ•œ ๋ฌธ๋ฒ•์— ๋ง‰ํž ๋•Œ๊ฐ€ ๋งŽ๋‹ค. C++, C#์„ ๋”ฐ๋กœ ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค C++/CLI๋ฅผ ๋ฐฐ์šฐ๋Š”๋ฐ ๋” ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ๊ฐœ์ธ์ ์ธ ํŽธ๊ฒฌ์ผ์ง€ ๋ชจ๋ฅด๋‚˜ ๊ทธ๋งŒํผ ์–ธ์–ด ์Šต๋“์ด ์–ด๋ ต๊ณ , ์ด์— ๋™์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋„ ๊ฝค ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ๋ฒ•์€ MSDN ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋’ค์ ์ด๋ฉด ์–ด๋–ป๊ฒŒ๋“  ํ•ด๊ฒฐ์ด ๋œ๋‹ค. ์˜คํžˆ๋ ค ์ง„์งœ ํฐ ๋„์ „์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ฐธ๊ณ  ์„œ์ ์€ C++/CLI์˜ ๋ฌธ๋ฒ•์ด๋‚˜ ๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์†Œ๊ฐœํ•˜๊ธฐ ๋ฐ”์˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์‹ค๋ฌด์—์„œ ๊ฒช์„ ๊ณ ๋ฏผ์€ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•  ๋• ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์ธ ๋ฌธ์ œ๋ณด๋‹จ ์ปดํŒŒ์ผ์ด๋‚˜ ๋งํฌ ์ตœ์ ํ™” ๋•Œ๋ฌธ์— ๋” ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ๋” ๊ณ ์ƒ์„ ํ•œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฌ ์ง€์นจ์„œ๋Š” ๋ณธ ์ ์ด ์—†๋‹ค. ์•ž์œผ๋กœ ๋‹ค๋ฃฐ ๋‚ด์šฉ์€ ๋ชจ๋‘ ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์— ๊ทผ๊ฑฐํ•œ๋‹ค. ๊ธ€ ์“ฐ๋Š” ์ž์‹ ์กฐ์ฐจ ์ด๊ฒƒ์ด ์ตœ์ ์ธ์ง€ ํ™•์‹ ํ•˜์ง„ ๋ชปํ•œ๋‹ค. ๋‹ค๋งŒ, ํ•˜๋‚˜์˜ ์„ฑ๊ณต ์‚ฌ๋ก€๋กœ์จ ๊ทธ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์˜ ์„ ํƒ์ด์ž ๋ฐ”์ด๋ธ”์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ , ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ์—†๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์ ˆํ•œ ๋Œ€์•ˆ์„ ์ฐพ์•„๋ƒˆ๋‹ค๋ฉด ๋ชจ์ชผ๋ก ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ณต๊ฐœํ•ด์คฌ์œผ๋ฉด ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ๋ฐ”๋žจ์ด ์žˆ๋‹ค. ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋ฐ”๊พธ๊ธฐ ์ง€๋‚œ ์นผ๋Ÿผ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์„ ๋˜์งš์–ด๋ณด์ž. 3์›”์— ๋งŒ๋“  TimeLib(์„œ๋ธŒ๋ฒ„์ „ ์ €์žฅ์†Œ ์ฃผ์†Œ: https://imaso.googlecode.com/svn/trunk/200902-TimeLib )์€ ํฌ๊ฒŒ ์„ธ ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. TimeLib UnitTest++ TimeLibTest TimeLib์ด ์ฃผ ํ”„๋กœ์ ํŠธ์ด๊ณ  TimeSpan ๋“ฑ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฃผ์ฒด์ด๋‹ค. UnitTest++์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. TimeLibTest์€ UnitTest++์„ ํ™œ์šฉํ•ด TimeLib์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•œ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ ์„ธ ๊ฐœ๋Š” ๋ชจ๋‘ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Lib)์˜€๊ณ  ์•„์ง ๊ด€๋ฆฌ๋˜๋Š” ํด๋ž˜์Šค๋Š” ์—†์—ˆ๋‹ค. ์•„๋‹ˆ, ์‚ฌ์‹ค์€ LogManaged๋ž€ ๊ด€๋ฆฌ๋˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ธด ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์ด ํด๋ž˜์Šค๋ฅผ ์‹ค์ œ๋กœ ์“ฐ์ง„ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋  ๊ฒŒ ์—†์—ˆ๋‹ค. ์ด์ฏค์—์„œ ์ด ์นผ๋Ÿผ์—์„œ ๋‹ค๋ฃจ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋– ์˜ฌ๋ ค๋ณด์ž. ์šฐ๋ฆฌ๋Š” CLR ๊ธฐ๋Šฅ์ด ์—†๋Š” ์ˆœ์ˆ˜ ๋„ค์ดํ‹ฐ๋ธŒ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฃจ๋Š” ๊ฐœ๋ฐœ์ž๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋А ๋‚  ๋ฌด์Šจ ์ด์œ ์—์„ ์ง€ ๊ธฐ์กด ์ฝ”๋“œ์— CLR์„ ๋ถ™์ด๊ธฐ๋กœ ๊ฒฐ์ •๋๋‹ค. C++์šฉ XML ํŒŒ์„œ์˜ ๋ณต์žก์„ฑ ๋•Œ๋ฌธ์— ๋จธ๋ฆฌ๊ฐ€ ๊นจ์งˆ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ด์œ ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์•„๋‹ˆ๋ฉด ๊ทธ์ € .NET Framework ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ๊ฒŒ ์ผ์ƒ์˜ ์†Œ์›์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด์œ ์•ผ ์–ด๋–ป๋“  C++/CLI๋ž€ ์ตœ์‹  ๊ธฐ์ˆ ๋กœ ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ท๋„ท์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํฌ์žฅํ•˜๊ธฐ๋กœ ํ•œ ์ƒํ™ฉ์ด๋‹ค. ์ด ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ 4์›” ์นผ๋Ÿผ์—์„  LogManaged ํด๋ž˜์Šค๋ฅผ C# ์ฝ”๋“œ์—์„œ ํ˜ธ์ถœํ•ด๋ดค๋‹ค. ๊ทธ ๊ณผ์ •์€ ๋ฌด์ฒ™ ๊ฐ„๋‹จํ–ˆ์œผ๋‹ˆ, TimeLib.lib์„ TimeLib.dll๋กœ ๋นŒ๋“œํ•˜๊ณ , C# ํ”„๋กœ์ ํŠธ์—์„œ TimeLib.dll์„ ์ฐธ์กฐํ–ˆ์„ ๋ฟ์ด๋‹ค. ๊ทธ๋Ÿฐ ํ›„ C# ์†Œ์Šค ํŒŒ์ผ์— LogManage.Write("does it work?");๋ผ๊ณ  ์ ์œผ๋‹ˆ ์ฝ˜์†” ์ฐฝ์— "does it work?"๋ž€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋–ด๋‹ค. ์ฐธ ์‰ฝ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€๊ฐ€? ๋ช…์„ํ•œ ์—ฌ๋Ÿฌ๋ถ„์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ˆˆ์น˜์ฑ˜์œผ๋ฆฌ๋ผ ๋ฏฟ๋Š”๋‹ค. ๋ฌธ์ œ๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Lib)์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Dll)๋กœ ๋ฐ”๊พธ๋Š” ๋ถ€๋ถ„์ด๋‹ค. TimeLib์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ”๊พธ๋Š” ๊ฑฐ์•ผ ์–ด๋ ต์ง€ ์•Š๋‹ค. ํ”„๋กœ์ ํŠธ ์†์„ฑ ์ฐฝ์— ๊ฐ€์„œ ๊ตฌ์„ฑ ํ˜•์‹์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ”๊พธ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TimeLib์„ ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–จ๊นŒ? ์—ฌ๊ธฐ์„  TimeLib์„ ํ…Œ์ŠคํŠธํ•˜๋Š” TimeLibTest๊ฐ€ ๊ทธ ๋‹น์‚ฌ์ž๊ฐ€ ๋˜๋Š”๋ฐ, ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ง€๋งŒ ๋นŒ๋“œ๊ฐ€ ๊นจ์ง„๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ์ฐธ์กฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ๋ฌผ๋ก  ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ์žฅ์ ๋„ ์žˆ์ง€๋งŒ, ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ ํ˜•์‹์„ ๋ฐ”๊พผ๋‹ค๋ฉด ๊ทธ์•ผ๋ง๋กœ ์žฌ์•™์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ ค๋ฉด dllexport๋ผ๋Š” ๋ฐฉ์‹์„ ์ทจํ•ด์•ผ ํ•œ๋‹ค. #define DllExport __declspec( dllexport ) class DllExport C { int i; virtual int func( void ) { return 1; } }; ์ด๋Ÿฐ ์‹์œผ๋กœ dllexport๋กœ ์ง€์ •ํ•œ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋งŒ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ์™ธ์—๋„ ๋ช‡ ๊ฐ€์ง€ ์ œ์•ฝ์ด ์žˆ๋Š”๋ฐ, ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ช‡ ๋ฐฑ ์ค„์— ๋ถˆ๊ณผํ•˜๋ฉด ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ ๋ณดํ†ต ์ˆ˜๋งŒ ์ค„์— ๋‹ฌํ•˜๋Š” ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ด์ „ํ•˜๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋”๋ผ๋„ ๊ทธ๋งŒํ•œ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ผ ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ? ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๊ฐ€ ์†๋Œ€๊ธฐ ๋ฌด์„œ์šธ ์ •๋„๋กœ ๊ฑฐ๋Œ€ํ•˜์ง„ ์•Š๋‹ค๋ฉด ํ•œ๋ฒˆ ์‹œ๋„ํ•ด๋ด๋„ ์ข‹๊ฒ ๋‹ค. ์ด๋ ‡๊ฒŒ ์นผ๋Ÿผ์„ ํ†ตํ•ด ๊ฒฝํ—˜๋‹ด๊ณผ ์ง€์‹์„ ์ „๋‹ฌํ•˜๋Š” ์ž…์žฅ์ด์ง€๋งŒ ๋ชจ๋“  ๊ฑธ ํ•ด๋ณด์ง„ ์•Š์•˜๋‹ค. ์—…๋ฌด์—์„œ ๋‹ค๋ฃจ๋Š” ์„œ๋ฒ„ ์—”์ง„์€ ์ƒ๋‹นํžˆ ๊ทœ๋ชจ๊ฐ€ ์ปธ๊ธฐ ๋•Œ๋ฌธ์— dllexport ๋ฐฉ์‹์€ ๋„์ €ํžˆ ์—„๋‘๋ฅผ ๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค. ๋งŒ์•ฝ dllexport ๋ฐฉ์‹์„ ์ทจํ•œ๋‹ค๋ฉด ํ•ต์‹ฌ์ธ ์—”์ง„๋ฟ ์•„๋‹ˆ๋ผ ๊ทธ ์œ„์— ๋†“์ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์ด ๋ชจ๋‘ ๋Œ€๋Œ€์ ์ธ ์ˆ˜์ˆ ์„ ๋ฐ›์•„์•ผ ํ•  ์ƒํ™ฉ์ด์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์—”์ง„๊ณผ ๊ทธ ์œ„์˜ ๊ณ„์ธต์„ ๋ชจ๋‘ ์„ค๊ณ„ํ•œ ์‚ฌ๋žŒ ์ค‘ ํ•œ ๋ช…์ด๋ผ๋ฉด dllexport ๋ฐฉ์‹์— ๋„์ „ํ•ด๋„ ์ข‹์„์ง€ ๋ชจ๋ฅธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฐ ์ž…์žฅ์ด ์•„๋‹ˆ์—ˆ๊ธฐ์— ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ–ˆ๋‹ค. ์–‘์ชฝ ๋ชจ๋‘๋ฅผ ๊ฒฝํ—˜ํ•œ ๊ฑด ์•„๋‹ˆ๋‹ˆ ์†”์งํžˆ ์–ด๋А ์ชฝ์ด ๋” ๋‚˜์€์ง€๋Š” ๋ชจ๋ฅธ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋‹ฟ์•„ dllexport ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋˜ ์ž๋ฆฌ๋ฅผ ๋งˆ๋ จํ•ด ๋…ธํ•˜์šฐ๋ฅผ ๋‚˜๋ˆ„๊ธฐ๋กœ ํ•˜๊ณ , ์ด๋ฒˆ ์‹œ๊ฐ„์—” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ๋กœ ํ•˜์ž. ์ค€๋น„ ๊ณผ์ • ์ง€๊ธˆ๋ถ€ํ„ฐ ์‹ค์Šตํ•  ๋‚ด์šฉ์€ ๋ชจ๋‘ Google Code๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋œ๋‹ค. ์ €์žฅ์†Œ ์ฃผ์†Œ๋Š” https://imaso.googlecode.com/svn/trunk/200905-TimeLib ์ด๋‹ค. ์„œ๋ธŒ๋ฒ„์ „ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ด์šฉํ•ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‚ด๋ ค ๋ฐ›๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ ํ™ˆํŽ˜์ด์ง€ ๋กœ ์™€์„œ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ 200905-TimeLib์€ ์‹ค์Šต ๊ณผ์ •์ด ์™„๊ฒฐ๋œ ์ตœ์ข… ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์ด ๊ทธ ๊ณผ์ •์„ ์•Œ๋ ค๋ฉด ๋ณ€๊ฒฝ ๋‚ด์—ญ ์—์„œ ๋ฆฌ๋น„์ „ 15๋ฒˆ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋˜๊ฐ€ ์ง€๊ธˆ๋ถ€ํ„ฐ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋”ฐ๋ผ ํ•ด์•ผ ํ•œ๋‹ค. ์šฐ์„  https://imaso.googlecode.com/svn/trunk/200903-TimeLib ์„ ๋‚ด๋ ค ๋ฐ›๋Š”๋‹ค. ์—ฌ๊ธฐ์—” DLL๋กœ ๋นŒ๋“œํ•œ TimeLib๊ณผ TimeLib์„ ์ฐธ์กฐํ•˜๋Š” C# ํ”„๋กœ์ ํŠธ LogManagedTest๊ฐ€ ์žˆ๋‹ค. ์›๋ž˜ TimeLibTest์™€ UnitTest++์ด ์žˆ์—ˆ์ง€๋งŒ TimeLib์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด์„œ ๋นŒ๋“œ๊ฐ€ ๊นจ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๊ฑฐํ•œ ๋ฐ” ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ ˆ๊ฐ€์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” CLR์„ ์ง€์›ํ•˜๋„๋ก ๋ฐ”๊ฟจ์ง€๋งŒ ์•„์ง ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์†๋Œ€์ง€ ๋ชปํ•œ ์ƒํ™ฉ์ด๋‹ค. ์ด์ œ https://imaso.googlecode.com/svn/trunk/200902-TimeLib ๋ฅผ ๋‚ด๋ ค ๋ฐ›์ž. ์—ฌ๊ธฐ์—” UnitTest++๊ณผ TimeLibTest๊ฐ€ ์žˆ๋‹ค. ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์•„๊นŒ ๋ฐ›์€ 200903-TimeLib์— ๋„ฃ์œผ๋ฉด ์ค€๋น„๋Š” ๋๋‚œ ์…ˆ์ด๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” TimeLib์„ ์ฐธ์กฐํ•˜๋Š” TimeLibTest ํ”„๋กœ์ ํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋นŒ๋“œ๋˜๊ณ  ์ž‘๋™ํ•˜๋„๋ก ๊ณ ์น˜๋Š” ์—ฌ์ •์„ ๋– ๋‚œ๋‹ค. ์—ฌ์ •์˜ ์‹œ์ž‘ ์šฐ์„  TimeLib ์†”๋ฃจ์…˜ ํŒŒ์ผ(TimeLib.sln)์„ ์—ฐ๋‹ค. ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์˜ ์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ์—” LogManagedTest์™€ TimeLib๋งŒ ์žˆ๋‹ค. ์—ฌ๊ธฐ์— UnitTest++๊ณผ TimeLibTest ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž. ์ด์ œ [ํ”„๋กœ์ ํŠธ โ€“ ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ] ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ [๊ทธ๋ฆผ 1]์ฒ˜๋Ÿผ ์„ค์ •ํ•œ๋‹ค. TimeLibTest ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ ๋ฅด๊ณ  ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ TimeLib๊ณผ UnitTest++์— ์ข…์†์ ์ด๋ž€ ๊ฑธ ๋ช…์‹œํ•œ๋‹ค. ์ด์ œ TimeLibTest์˜ ์†์„ฑ ํŽ˜์ด์ง€๋กœ ๊ฐ„๋‹ค. [C/C++ โ€“ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ]์— "..\TimeLib" ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋กœ์จ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” "..\UnitTest++\src"; "..\TimeLib" ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆผ 1. ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ ๊ผญ ํ•„์š”ํ•œ ์ ˆ์ฐจ๋Š” ์•„๋‹ˆ์ง€๋งŒ [TimeLib ์†์„ฑ ํŽ˜์ด์ง€ โ€“ C/C++ โ€“ ์ „์ฒ˜๋ฆฌ๊ธฐ โ€“ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ •์˜]์—์„œ _LIB ์„ ๋นผ๋ฉด ๋” ์ข‹๋‹ค. ๋ชจ๋“  ๊ฒŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ๋Œ๋˜ 2์›”, 3์›” ๋ฌด๋ ต์œผ๋กœ ๋Œ์•„๊ฐ”๋‹ค. ๋‹จ์ง€ ๊ด€๋ฆฌ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ TimeLib์— ์ถ”๊ฐ€๋๋‹ค๋Š” ์ ๋งŒ ๋‹ค๋ฅด๋‹ค. ์ด์ œ [๋นŒ๋“œ โ€“ ์ผ๊ด„ ๋นŒ๋“œ] ๋ฉ”๋‰ด๋กœ ๊ฐ€ Win32 ํ”Œ๋žซํผ์— ์†ํ•˜๋Š” ๋ชจ๋“  ๋นŒ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  โ€˜๋‹ค์‹œ ๋นŒ๋“œโ€™๋ฅผ ํ•ด๋ณด์ž. ์–ด๋–ค๊ฐ€? ํ˜น์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๊ฐ€? ๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งํฌ ์˜ค๋ฅ˜๋งŒ ๋ฐœ์ƒํ•˜๋ฉด ์ œ๋Œ€๋กœ ๋œ ๊ฒƒ์ด๋‹ค. LINK : fatal error LNK1181: '..\debug\timelib.lib' ์ž…๋ ฅ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ์—†์ด ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋‹ค๋ฉด ์ด์ œ ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค. ๋งํฌ ์˜ค๋ฅ˜๋งŒ ํ•ด๊ฒฐํ•˜๋ฉด(์‰ฝ์ง„ ์•Š์ง€๋งŒ), ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋˜ ๋Œ€๋กœ ๋œ๋‹ค. ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด์„œ CLR ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ! ๋ฌธ์ œ ํ•ด๊ฒฐ, ๊ทธ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ์ด์ œ๊ป ๊ฒ€ํ† ํ•œ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํ•œ์ฐธ ๊ณ ๋ฏผํ•œ ์ ์ด ์žˆ๋‹ค. ์‹œ๊ฐ„์€ ๋„‰๋„‰ํ–ˆ์ง€๋งŒ ๋ฉฐ์น  ๋™์•ˆ ์ ์ ˆํ•œ ๋ฐฉ์•ˆ์„ ์ฐพ์ง€ ๋ชปํ•ด ๋งˆ์Œ์ด ํŽธ์น˜ ์•Š์•˜๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ C++/CLI ๊ด€๋ จ ์ฑ…์€ ๋ฏธ๊ตญ์—๋„ ๋ช‡ ๊ถŒ ์•ˆ ๋˜๊ณ , ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•ด๋ณธ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋„ ๋งŽ์ง€ ์•Š์•˜๋‹ค. ์„ค์‚ฌ ๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ๋”๋ผ๋„ ๊ฒฝํ—˜๋‹ด์„ ๊ณต์œ ํ•˜์ง„ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘์— โ€œ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅโ€์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์งง์€ ๊ธ€์„ MSDN ํฌ๋Ÿผ์—์„œ ์ฝ๊ฒŒ ๋๋‹ค. ๋‹น์‹œ๋กœ์„  ํ™•์‹คํ•œ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ๋„ ์‹œ๋„ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋ฐฉ๋„๊ฐ€ ์žˆ์ง€๋„ ์•Š์•˜๊ณ . ๊ทธ๋ฆฌํ•˜์—ฌ ๋ˆ์งˆ๊ธฐ๊ฒŒ ์‚ฝ์งˆ์„ ๊ณ„์† ํ–ˆ๋‹ค. ์ด ๊ธ€์—์„  ๊ทธ ์‚ฝ์งˆ ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ„๋‹ค. ๊ณง๋ฐ”๋กœ ์ •๋‹ต์„ ๋‚ด๊ธฐ๋ณด๋‹จ ์‹ค์ˆ˜๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ์—†๋Š”์ง€ ์—ฌ๋Ÿฌ๋ถ„ ์Šค์Šค๋กœ ํŒ๋‹จํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. ํฌ๋Ÿผ์—์„œ ํžŒํŠธ๋ฅผ ๋“ฃ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋Œ€์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? MSDN์˜ ์„ค๋ช…๋ถ€ํ„ฐ ์ฝ์–ด๋ณด์ž. ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ lib ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ ์ฆ๋ถ„ ๋งํฌ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .lib ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŽ์ด ์žˆ์œผ๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์ด ์˜ˆ๋กœ ์„ค์ •๋˜๋ฉด ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ์€ ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” .lib์˜ .obj ํŒŒ์ผ์— ๋งํฌํ•˜์—ฌ ์ฆ๋ถ„ ๋งํฌ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ง์ด ๋ณต์žกํ•œ๋ฐ ๊ฒฐ๋ก ์€ ๊ฐ„๋‹จํ•˜๋‹ค. ์›๋ž˜๋Š” TimeLib์˜ obj ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋ชจ์•„์„œ TimeLib.lib์„ ์ƒ์„ฑํ•œ๋‹ค. TimeLibTest๋ฅผ ๋นŒ๋“œํ•  ๋• TimeLib.lib๋ฅผ ์ด์šฉํ•  ๋ฟ TimeLib์˜ obj ํŒŒ์ผ์„ ๋‹ค์‹œ ๋งํฌํ•˜์ง„ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ TimeLibTest์— ์ข…์†์„ฑ ์ž…๋ ฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, TimeLibTest์„ ๋งํฌํ•  ๋•Œ TimeLib์˜ obj ํŒŒ์ผ์„ ๋˜ ๋‹ค์‹œ ๋งํฌํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜‘๊ฐ™์€ ๊ณผ์ •์„ ๋‘ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ์…ˆ์ด๋‹ค. ๊ทธ๋ž˜๋„ ์–ด์ฉŒ๊ฒ ๋Š”๊ฐ€? ๋‹น์‹œ๋กœ์„ , ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ๋„ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชป ํ–ˆ๋‹ค. ์ด์ œ [TimeLibTest ์†์„ฑ ํŽ˜์ด์ง€ โ€“ ๋ง์ปค โ€“ ์ผ๋ฐ˜ โ€“ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ ์‚ฌ์šฉ]์„ โ€œ์˜ˆโ€๋กœ ๋ฐ”๊พผ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด [๋ชฉ๋ก 1์ด๋˜ ๋ช…๋ น์ค„์ด [๋ชฉ๋ก 2]์ฒ˜๋Ÿผ ๋ฐ”๋€๋‹ค. ๋ชฉ๋ก 1. TimeLibTest์˜ ๋งํฌ์‹œ ๋ช…๋ น์ค„ /OUT:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TimeLibTest.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "..\debug\unittest++.lib" "..\debug\timelib.lib" ๋ชฉ๋ก 2. ๋ฐ”๋€ ๋ช…๋ น์ค„ /OUT:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TimeLibTest.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "..\unittest++\obj\unittest++\debug\timehelpers.obj" ์ค‘๋žตโ€ฆโ€ฆ "..\unittest++\obj\unittest++\debug\xmltestreporter.obj" "..\debug\timelib.lib" ์ด์ œ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ํ•ด๋ณด๋ฉด ์งœ์ž”~ LINK : fatal error LNK1181: '..\debug\timelib.lib' ์ž…๋ ฅ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ! ์—ฌ์ „ํ•˜๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. C++ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‹ค๋ฅธ C++ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ๋ฅผ ์‹œ๋„ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ DLL๋กœ ๋ฐ”๊พผ TestLib ํ”„๋กœ์ ํŠธ์—์„œ timelib.lib ํŒŒ์ผ์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์‹ค์ œ๋กœ [๋ชฉ๋ก 2]์—๋Š” ์ด์ƒํ•œ ์ ์ด ์žˆ๋‹ค. TimeLibTest๋Š” ๋ถ„๋ช… TimeLib๊ณผ UnitTest++์„ ๋ชจ๋‘ ์ฐธ์กฐํ•˜๋Š”๋ฐ, [๋ชฉ๋ก 2]์—์„  UnitTest++์˜ obj ํŒŒ์ผ๋งŒ ๋ณด์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งจ ๋์— โ€œ..\debug\timelib.libโ€์ด๋ž€ ๋Œ€๋ชฉ์ด ์žˆ๋‹ค. ์ด๋Ÿฐ ํ˜„์ƒ์„ ๋ง‰๋Š” ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ์„ ์—†์• ๋Š” ๊ฒƒ์ด๋‹ค. ์ข…์†์„ฑ์„ ์—†์• ๋ฉด TimeLibTest๊ฐ€ TimeLib๋ณด๋‹ค ๋จผ์ € ๋นŒ๋“œ๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์ง€๋งŒ ์ด๋Ÿฐ ์ผ์€ ๋ง‰๊ธฐ ์‰ฝ๋‹ค. [ํ”„๋กœ์ ํŠธ โ€“ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์ˆœ์„œ]์—์„œ ์กฐ์ • ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ข…์†์„ฑ์„ ์—†์•ค๋‹ค๊ณ  ํ•ด์„œ TimeLib์˜ obj ํŒŒ์ผ์„ ๊ณง๋ฐ”๋กœ ๋งํฌํ•  ๋ฆฌ๋Š” ์—†๋‹ค. ์ข…์†์„ฑ์ด ์—†์œผ๋‹ˆ ๋‘ ํ”„๋กœ์ ํŠธ์˜ ๊ด€๊ณ„๋ฅผ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์•Œ ๋ฆฌ ์—†๋‹ค. ๊ทธ๋ž˜์„œ [TimeLibTest ์†์„ฑ ํŽ˜์ด์ง€ โ€“ ๋ง์ปค โ€“ ์ž…๋ ฅ โ€“ ์ถ”๊ฐ€ ์ข…์†์„ฑ]์— โ€œTimeLib\$(ConfigurationName)\*.objโ€๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ˆ˜๋™์œผ๋กœ obj ํŒŒ์ผ์„ ๊ฐ€์ ธ๋‹ค ๋งํฌํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค. ์‹ค์ œ๋กœ ์ด์ฏค์—์„œ TimeLibTest๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋Œ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ์ž‘๋™ํ•œ๋‹ค. Success: 6 tests passed. Test time: 0.04 seconds. ๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . . ์ฐธ๊ณ  . ์ด ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์žฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ ๋ฆฌ๋น„์ „ 18 ์„ ๋‚ด๋ ค ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ๋” ๋‚˜์€ ์‹œ๋„ ์ฒ˜์Œ์—” ์œ„์˜ ๋ฐฉ๋ฒ•์— ๋งŒ์กฑํ–ˆ๋‹ค. ๋งํฌ๋ฅผ ํ•œ๋ฒˆ ๋” ํ•˜๋‹ˆ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋А๋ ค์ง€๊ธด ํ–ˆ์ง€๋งŒ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๋œฏ์–ด๊ณ ์น˜๋Š” ๊ฒƒ๋ณด๋‹จ ๋‚ซ์ง€ ์•Š์€๊ฐ€? ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์œผ๋‹ˆ, ํŠน์ • ๋นŒ๋“œ์‹œ ๋ฏธ๋ฌ˜ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•œ ์ƒ˜ํ”Œ๋กœ๋Š” ์žฌํ˜„ํ•˜๊ธฐ ํž˜๋“ค๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›์ธ์€ ๋ถ„๋ช…ํ•œ๋ฐ โ€œTimeLib\$(ConfigurationName)\*.objโ€์ด ๊ณจ์น˜๊ฑฐ๋ฆฌ์˜€๋‹ค. ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” Obj ํŒŒ์ผ์„ ๋ชจ๋‘ ๋งํฌ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. TimeLib\Debug\ ํด๋”์— TimeLib์˜ obj ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ, TimeLib์ด ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ(๊ทธ๋Ÿด ์ •๋„๋กœ ๋ณต์žกํ•œ ๊ตฌ์„ฑ์ด๋ผ๋ฉด)์˜ obj ํŒŒ์ผ์ด ๋“ค์–ด ์žˆ์–ด์„œ ๋งํฌ๊ฐ€ ๊ผฌ์ธ ๊ฒƒ์ด๋‹ค. [๋ชฉ๋ก 2]์—์„œ์ฒ˜๋Ÿผ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์•Œ์•„์„œ ํ•„์š”ํ•œ obj ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ์ด๋Ÿฐ ์ผ์ด ์—†๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋ก  ์š”์›ํ•œ ์ผ์ด๋‹ค. ๊ทธ๋Ÿฐ ๊นŒ๋‹ญ์— ๋นŒ๋“œ ์ข…์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ถ”๊ฐ€ ์ข…์†์„ฑ์— โ€œTimeLib\$(ConfigurationName)\*.objโ€๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์ด ์—†๋Š”๊ฐ€ ๊ณ ๋ฏผํ•œ ๊ฒƒ์ด๋‹ค. ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ ๋ฐฉ๋ฒ•์€ ์žˆ์—ˆ๋‹ค. ์˜์™ธ๋กœ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‹ค๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์—ฌํƒœ๊นŒ์ง€ ์‚ดํŽด๋ณธ ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ์•ฝ๊ฐ„ ๋’ค์ง‘๊ธด ํ•ด์•ผ ํ•œ๋‹ค. ๋” ์ž์„ธํžˆ ๋“ค์—ฌ๋‹ค ๋ณด๊ธฐ ์ „์— /clr ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ๋‹ค์‹œ ๊ฒ€ํ† ํ•ด๋ณด์ž. C++/CLI ํ”„๋กœ์ ํŠธ๋ฅผ /clr ์ปดํŒŒ์ผํ•  ๋•Œ ์„ ํƒํ• ๋งŒํ•œ ์ „๋žต์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€์ด๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด์— /clr ์˜ต์…˜์„ ์ฃผ๊ณ , ๋ชจ๋“  cpp ํŒŒ์ผ์„ /clr ์ปดํŒŒ์ผํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ CLR ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์“ฐ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค. ์ˆœ์ˆ˜ํ•œ CLR ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ์“ธ๋งŒํ•œ ์ „๋žต์ด์ง€๋งŒ, ๋„ค์ดํ‹ฐ๋ธŒ C++ ๊ธฐ๋Šฅ๋งŒ ์“ฐ๋Š” ์ฝ”๋“œ ํŒŒ์ผ๊นŒ์ง€ /clr ์ปดํŒŒ์ผ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ์ƒ์˜ ํ•˜๋ฝ์€ ํ•„์—ฐ์ ์ด๋‹ค. ์ถ”์ฒœํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. Expert C++/CLI๋ž€ ์ฑ…์—์„œ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด๋ ‡๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด ์„ค์ •์—์„  /clr์„ ๋บ€๋‹ค. CLR ๊ธฐ๋Šฅ์„ ์“ฐ๋Š” ์ฝ”๋“œ ํŒŒ์ผ๋งŒ ๋”ฐ๋กœ ์˜ต์…˜์„ ์ค€๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ์ •๋ฐ˜๋Œ€๋กœ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด ์„ค์ •์— /clr ์˜ต์…˜์„ ์ฃผ๊ณ , ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ํŒŒ์ผ์—๋งŒ /clr ์˜ต์…˜์„ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ์ด ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœ์ ํŠธ๋ฅผ CLR ํ”„๋กœ์ ํŠธ๋กœ ํ™•์žฅํ•  ๋• ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์„ ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌํƒœ๊นŒ์ง€ Expert C++/CLI๋ž€ ์ฑ…์ด ์ œ์‹œํ•œ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ž๋‹ค. ์‚ฌ์‹ค ์ด ๋ฐฉ๋ฒ•์ด ์ข‹๊ธด ํ•˜๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ์†Œ์Šค ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ์˜ต์…˜์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ด€๋ฆฌ๋˜๋Š” ์†Œ์Šค ํŒŒ์ผ๋งŒ ์†๋ณธ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ ๋‹ค. ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ๊ธฐ๋Šฅ ํ™•์žฅ์ด๋ผ ์ด์ƒ์ ์ด์ง€ ์•Š์€๊ฐ€? ์•ˆํƒ€๊นŒ์šด ์ผ์ด์ง€๋งŒ dllexport๊ฐ€ ์•„๋‹Œ obj ํŒŒ์ผ ๋งํฌ๋ฅผ ํ•  ๋• ์„ธ ๋ฒˆ์งธ ๋ฐฉ์‹์ด ๋” ๋‚ซ๋‹ค. TimeLib ํ”„๋กœ์ ํŠธ ์„ค์ •์— /clr ์˜ต์…˜์„ ์ฃผ์–ด์•ผ ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” TimeLibTest๊ฐ€ TimeLib์ด ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก  ๊ทธ ๋งŽ์€ ๊ธฐ์กด ์†Œ์Šค ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์†Œ์Šค ํŒŒ์ผ์„ ๋“œ๋ž˜๊ทธ ๋“ฑ์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ์„ ํƒํ•ด ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๋‹จ๋ฒˆ์— ๋ฐ”๊พธ๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€ TimeLib ํ”„๋กœ์ ํŠธ์— /clr์„ ์ ์šฉํ•˜๊ณ , ์ปดํŒŒ์ผ ์˜ต์…˜์„ ์ ์ ˆํžˆ ๊ณ ์น˜๋Š” ๊ฒƒ์ด๋‹ค. ์ปดํŒŒ์ผ ์˜ต์…˜์€ 2์›” ์นผ๋Ÿผ์— ๋”ฐ๋ผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ์—” ์ง€๋ฉด์ด ๋ชจ์ž๋ผ๋‹ˆ ์ง€๋‚œ ์นผ๋Ÿผ์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋งˆ์ณค์œผ๋ฉด ์ผ๋‹จ๋ฝ๋๋‹ค. ๋ฐ”๋กœ ๋นŒ๋“œํ•ด์„œ ๋Œ๋ ค๋ณด๋ฉด ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 6๊ฐœ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•œ๋‹ค. Success: 6 tests passed. Test time: 0.04 seconds. ๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . . ์ฐธ๊ณ  . ์ด ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์žฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ ๋ฆฌ๋น„์ „ 19 ์„ ๋‚ด๋ ค ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ๋‹น๋ถ€์˜ ๋ง 100% ํ™•์‹ ํ•˜์ง„ ๋ชปํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ ๋ฐ ๋งํฌ ์˜ต์…˜์„ ๊นŠ์ˆ™ํ•˜๊ฒŒ ํŒŒ๊ณ ๋“œ๋Š” ์ž๋ฃŒ๋Š” ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ, ์‚ฌ๋žŒ๋“ค์€ ์ด์ƒํ•˜๊ฒŒ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํŠน์ง•์—๋Š” ๊ด€์‹ฌ์„ ๋‘์ง€๋งŒ ์˜์™ธ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—” ์†Œํ™€ํ•œ ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ์‚ฌ์‹ค ํ•™๊ต ์ˆ™์ œ๋‚˜ ์†Œ๊ทœ๋ชจ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„  ๋นŒ๋“œ ๊ตฌ์„ฑ์ด ๊ทธ๋ฆฌ ์ค‘์š”ํ•˜์ง„ ์•Š๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋งŽ์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์งง๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. C++์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅธ C# ๋“ฑ์„ ๋‹ค๋ฃฐ ๋•Œ๋„ ์ปดํŒŒ์ผ ์˜ต์…˜์— ์ฃผ์˜๋ฅผ ๋œ ๊ธฐ์šธ์ธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๊ทœ๋ชจ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์šด์šฉํ•ด๋ณด๋‹ˆ ์ ์ ˆํ•œ ๋นŒ๋“œ ๊ตฌ์„ฑ์ด ์–ผ๋งˆ๋‚˜ ํฐ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค. ์šฐ์„  ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ๋ฉด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ง€์—ฐ๋œ๋‹ค. ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ๊ณ ์ณค์„ ๋ฟ์ธ๋ฐ 5๋ถ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ํŒ€๊ณผ ๋˜‘ ๊ฐ™์€ ์‹œ๊ฐ„์— ํ”„๋กœ์ ํŠธ ๋Œ€ ์—ฌ์„ฏ ๊ฐœ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์ด ๊ฐ™์€ ์ˆœ ์—†๋‹ค. ๋‹จ์ˆœํžˆ ์‹œ๊ฐ„์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ „์ž์™€ ๊ฐ™์€ ํŒ€ ํ™˜๊ฒฝ์—์„  ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธˆ์„ธ ์ง€์น˜๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ํ•‘๊ณ„ ์‚ผ์•„ ๋‹ค๋ฅธ ์ผ์— ์—ด์ค‘ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๋นŒ๋“œ ์‹œ๊ฐ„๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๋นŒ๋“œ๋ฅผ ์ ์ ˆํžˆ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฒ„๊ทธ๋ฅผ ์กฐ๊ธฐ์— ์žก์„ ์ˆ˜๋„ ์žˆ๋‹ค. โ€˜๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌโ€™๋‚˜ โ€˜์ž‘์€ ํ˜•์‹ ๊ฒ€์‚ฌโ€™ ๊ฐ™์€ ์˜ต์…˜์ด ๊ทธ๋Ÿฐ ์˜ˆ์— ์†ํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ด๋Ÿฐ ์˜ต์…˜์„ ์ ์šฉํ•˜๊ณ  ํ•œ๋™์•ˆ ๋ฒ„๊ทธ๋ฅผ ์ƒ๋‹นํžˆ ์žก์•„๋ƒˆ๋‹ค. ์ƒ์‚ฐ์„ฑ์„ ์ •๋ง ๋†’์ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ตœ์†Œํ•œ ํŒ€ ๊ตฌ์„ฑ์› ์ค‘ ํ•œ ๋ช…์€ ์ง€์†์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์„ ๊ฒ€ํ† ํ•˜๊ณ  ์ตœ์ ํ™”ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ, ์ด๋Ÿฐ ์—…๋ฌด๋Š” ์ง€๋ฃจํ•˜๊ณ  ์‚ฌ๋žŒ์„ ์ง€์น˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ๋ณด์ƒ์ด ๋”ฐ๋ผ์•ผ ์ข‹๋‹ค. ๋ณด๋„ˆ์Šค๋กœ ๋ฉ‹์ง„ ๋…ธํŠธ๋ถ์„ ์‚ฌ์ค„ ํ•„์š”์•ผ ์—†๊ฒ ์ง€๋งŒ ๊ฐ€๋” ๋–ก๋ณถ์ด๋ผ๋„ ์‚ฌ์ฃผ๋ฉด ์ข‹์ง€ ์•Š์„๊นŒ? ์•„๋‹ˆ๋ฉด ์ด ์—…๋ฌด๋ฅผ ํŒ€ ๊ตฌ์„ฑ์›์ด ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉด ๋งก์•„๋„ ์ข‹๊ฒ ๋‹ค.
Markdown
Site is Loading, Please wait... [Skip to content](https://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/#main) [์•ˆ๋“œ๋กœ๋ฉ”๋‹ค ํ† ๋ผ](https://andromedarabbit.net/) - [์ถ”์ฒœ ๊ธ€](https://andromedarabbit.net/recommended/) - [๊ตฌ์„ฑ์›](https://andromedarabbit.net/members/) - [Toggle website search](https://andromedarabbit.net/) [Menu Close](https://andromedarabbit.net/#mobile-menu-toggle) - [์ถ”์ฒœ ๊ธ€](https://andromedarabbit.net/recommended/) - [๊ตฌ์„ฑ์›](https://andromedarabbit.net/members/) - [Toggle website search](https://andromedarabbit.net/) # Blog 1. [Home](https://andromedarabbit.net/)\> 2. [2009](https://andromedarabbit.net/2009/)\> 3. [May](https://andromedarabbit.net/2009/05/)\> 4. [16](https://andromedarabbit.net/2009/05/16/)\> 5. [์นผ๋Ÿผ](https://andromedarabbit.net/category/pages/)\> 6. [C++/CLI ๊ฐ•์ขŒ: ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ฐ”๊พธ๊ธฐ](https://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/) ## C++/CLI ๊ฐ•์ขŒ: ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ฐ”๊พธ๊ธฐ - Post author:[์ตœ ์žฌํ›ˆ](https://andromedarabbit.net/author/plaintext/ "Posts by ์ตœ ์žฌํ›ˆ") - Post published:May 16, 2009 - Post category:[์นผ๋Ÿผ](https://andromedarabbit.net/category/pages/) - Post comments:[0 Comments](https://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/#respond) - Post last modified:February 8, 2020 ์ด ๊ธ€์€ ์›”๊ฐ„ [๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์›จ์–ด](http://www.imaso.co.kr/ "์›”๊ฐ„ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์›จ์–ด")(์ผ๋ช… ๋งˆ์†Œ) 2009๋…„ 5์›”ํ˜ธ์— ๊ธฐ๊ณ ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ตฌ์„ฑ์ด๋‚˜ ๋‚ด์šฉ ์ƒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. > C++/CLI๊ฐ€ ์–ด๋ ต๋‹ค ์–ด๋ ต๋‹ค ํ•˜๋Š”๋ฐ ์ด ๋ง์„ ๋‹จ์ˆœํžˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธก๋ฉด์—์„œ๋งŒ ๋ฐ”๋ผ๋ด์„  ์•ˆ ๋œ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ์— CLR ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด ํ™•์žฅํ•˜๋Š” ์ผ์— ์ฃผ๋กœ ์“ฐ๋Š” ๋งŒํผ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ๋„ ๋งŽ์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. ์ปดํŒŒ์ผ ์˜ต์…˜๋ถ€ํ„ฐ ๋งํฌ ์˜ต์…˜๊นŒ์ง€ ๊ตฌ์„๊ตฌ์„ ํŒŒ๊ณ ๋“ค์–ด์•ผ ๋น„๋กœ์†Œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค. **[์ตœ์žฌํ›ˆ](https://andromedarabbit.net/ "์ €์ž ๋ธ”๋กœ๊ทธ")** \| SK ์•„์ด๋ฏธ๋””์–ด์˜ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํŒ€์—์„œ ์ผํ•œ๋‹ค. ์š”์ฆ˜์€ ์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์ „๋…ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋„์ „์„ ์ฆ๊ธด๋‹ค. ์ง์—… ์™ธ์ ์ธ ์ธก๋ฉด์—์„  ๋ฐฐ์ฒ ์ˆ˜์˜ ์Œ์•… ์บ ํ”„๋ฅผ 15๋…„์งธ ์ฆ๊ฒจ ๋“ฃ๊ณ , U2๊ฐ€ ์ตœ๊ณ ์˜ ๋ฐด๋“œ๋ผ ์ƒ๊ฐํ•œ๋‹ค. C++/CLI๋ฅผ ๋‹ค๋ฃจ๋ฉด ๋‚œํ•ดํ•œ ๋ฌธ๋ฒ•์— ๋ง‰ํž ๋•Œ๊ฐ€ ๋งŽ๋‹ค. C++, C\#์„ ๋”ฐ๋กœ ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค C++/CLI๋ฅผ ๋ฐฐ์šฐ๋Š”๋ฐ ๋” ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ๊ฐœ์ธ์ ์ธ ํŽธ๊ฒฌ์ผ์ง€ ๋ชจ๋ฅด๋‚˜ ๊ทธ๋งŒํผ ์–ธ์–ด ์Šต๋“์ด ์–ด๋ ต๊ณ , ์ด์— ๋™์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋„ ๊ฝค ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ๋ฒ•์€ MSDN ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋’ค์ ์ด๋ฉด ์–ด๋–ป๊ฒŒ๋“  ํ•ด๊ฒฐ์ด ๋œ๋‹ค. ์˜คํžˆ๋ ค ์ง„์งœ ํฐ ๋„์ „์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ฐธ๊ณ  ์„œ์ ์€ C++/CLI์˜ ๋ฌธ๋ฒ•์ด๋‚˜ ๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์†Œ๊ฐœํ•˜๊ธฐ ๋ฐ”์˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์‹ค๋ฌด์—์„œ ๊ฒช์„ ๊ณ ๋ฏผ์€ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•  ๋• ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์ธ ๋ฌธ์ œ๋ณด๋‹จ ์ปดํŒŒ์ผ์ด๋‚˜ ๋งํฌ ์ตœ์ ํ™” ๋•Œ๋ฌธ์— ๋” ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ๋” ๊ณ ์ƒ์„ ํ•œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฌ ์ง€์นจ์„œ๋Š” ๋ณธ ์ ์ด ์—†๋‹ค. ์•ž์œผ๋กœ ๋‹ค๋ฃฐ ๋‚ด์šฉ์€ ๋ชจ๋‘ ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์— ๊ทผ๊ฑฐํ•œ๋‹ค. ๊ธ€ ์“ฐ๋Š” ์ž์‹ ์กฐ์ฐจ ์ด๊ฒƒ์ด ์ตœ์ ์ธ์ง€ ํ™•์‹ ํ•˜์ง„ ๋ชปํ•œ๋‹ค. ๋‹ค๋งŒ, ํ•˜๋‚˜์˜ ์„ฑ๊ณต ์‚ฌ๋ก€๋กœ์จ ๊ทธ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์˜ ์„ ํƒ์ด์ž ๋ฐ”์ด๋ธ”์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ , ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ์—†๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์ ˆํ•œ ๋Œ€์•ˆ์„ ์ฐพ์•„๋ƒˆ๋‹ค๋ฉด ๋ชจ์ชผ๋ก ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ณต๊ฐœํ•ด์คฌ์œผ๋ฉด ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ๋ฐ”๋žจ์ด ์žˆ๋‹ค. ### ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋ฐ”๊พธ๊ธฐ ์ง€๋‚œ ์นผ๋Ÿผ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์„ ๋˜์งš์–ด๋ณด์ž. 3์›”์— ๋งŒ๋“  TimeLib(์„œ๋ธŒ๋ฒ„์ „ ์ €์žฅ์†Œ ์ฃผ์†Œ: <https://imaso.googlecode.com/svn/trunk/200902-TimeLib>)์€ ํฌ๊ฒŒ ์„ธ ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. - TimeLib - UnitTest++ - TimeLibTest TimeLib์ด ์ฃผ ํ”„๋กœ์ ํŠธ์ด๊ณ  TimeSpan ๋“ฑ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฃผ์ฒด์ด๋‹ค. UnitTest++์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. TimeLibTest์€ UnitTest++์„ ํ™œ์šฉํ•ด TimeLib์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•œ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ ์„ธ ๊ฐœ๋Š” ๋ชจ๋‘ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Lib)์˜€๊ณ  ์•„์ง ๊ด€๋ฆฌ๋˜๋Š” ํด๋ž˜์Šค๋Š” ์—†์—ˆ๋‹ค. ์•„๋‹ˆ, ์‚ฌ์‹ค์€ LogManaged๋ž€ ๊ด€๋ฆฌ๋˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ธด ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์ด ํด๋ž˜์Šค๋ฅผ ์‹ค์ œ๋กœ ์“ฐ์ง„ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋  ๊ฒŒ ์—†์—ˆ๋‹ค. ์ด์ฏค์—์„œ ์ด ์นผ๋Ÿผ์—์„œ ๋‹ค๋ฃจ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋– ์˜ฌ๋ ค๋ณด์ž. ์šฐ๋ฆฌ๋Š” CLR ๊ธฐ๋Šฅ์ด ์—†๋Š” ์ˆœ์ˆ˜ ๋„ค์ดํ‹ฐ๋ธŒ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฃจ๋Š” ๊ฐœ๋ฐœ์ž๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋А ๋‚  ๋ฌด์Šจ ์ด์œ ์—์„ ์ง€ ๊ธฐ์กด ์ฝ”๋“œ์— CLR์„ ๋ถ™์ด๊ธฐ๋กœ ๊ฒฐ์ •๋๋‹ค. C++์šฉ XML ํŒŒ์„œ์˜ ๋ณต์žก์„ฑ ๋•Œ๋ฌธ์— ๋จธ๋ฆฌ๊ฐ€ ๊นจ์งˆ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ด์œ ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์•„๋‹ˆ๋ฉด ๊ทธ์ € .NET Framework ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ๊ฒŒ ์ผ์ƒ์˜ ์†Œ์›์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด์œ ์•ผ ์–ด๋–ป๋“  C++/CLI๋ž€ ์ตœ์‹  ๊ธฐ์ˆ ๋กœ ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ท๋„ท์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํฌ์žฅํ•˜๊ธฐ๋กœ ํ•œ ์ƒํ™ฉ์ด๋‹ค. ์ด ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ 4์›” ์นผ๋Ÿผ์—์„  LogManaged ํด๋ž˜์Šค๋ฅผ C\# ์ฝ”๋“œ์—์„œ ํ˜ธ์ถœํ•ด๋ดค๋‹ค. ๊ทธ ๊ณผ์ •์€ ๋ฌด์ฒ™ ๊ฐ„๋‹จํ–ˆ์œผ๋‹ˆ, TimeLib.lib์„ TimeLib.dll๋กœ ๋นŒ๋“œํ•˜๊ณ , C\# ํ”„๋กœ์ ํŠธ์—์„œ TimeLib.dll์„ ์ฐธ์กฐํ–ˆ์„ ๋ฟ์ด๋‹ค. ๊ทธ๋Ÿฐ ํ›„ C\# ์†Œ์Šค ํŒŒ์ผ์— LogManage.Write("does it work?");๋ผ๊ณ  ์ ์œผ๋‹ˆ ์ฝ˜์†” ์ฐฝ์— "does it work?"๋ž€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋–ด๋‹ค. ์ฐธ ์‰ฝ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€๊ฐ€? ๋ช…์„ํ•œ ์—ฌ๋Ÿฌ๋ถ„์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ˆˆ์น˜์ฑ˜์œผ๋ฆฌ๋ผ ๋ฏฟ๋Š”๋‹ค. ๋ฌธ์ œ๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Lib)์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Dll)๋กœ ๋ฐ”๊พธ๋Š” ๋ถ€๋ถ„์ด๋‹ค. TimeLib์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ”๊พธ๋Š” ๊ฑฐ์•ผ ์–ด๋ ต์ง€ ์•Š๋‹ค. ํ”„๋กœ์ ํŠธ ์†์„ฑ ์ฐฝ์— ๊ฐ€์„œ ๊ตฌ์„ฑ ํ˜•์‹์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ”๊พธ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TimeLib์„ ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–จ๊นŒ? ์—ฌ๊ธฐ์„  TimeLib์„ ํ…Œ์ŠคํŠธํ•˜๋Š” TimeLibTest๊ฐ€ ๊ทธ ๋‹น์‚ฌ์ž๊ฐ€ ๋˜๋Š”๋ฐ, ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ง€๋งŒ ๋นŒ๋“œ๊ฐ€ ๊นจ์ง„๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ์ฐธ์กฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ๋ฌผ๋ก  ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ์žฅ์ ๋„ ์žˆ์ง€๋งŒ, ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ ํ˜•์‹์„ ๋ฐ”๊พผ๋‹ค๋ฉด ๊ทธ์•ผ๋ง๋กœ ์žฌ์•™์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ ค๋ฉด dllexport๋ผ๋Š” ๋ฐฉ์‹์„ ์ทจํ•ด์•ผ ํ•œ๋‹ค. ``` #define DllExport __declspec( dllexport ) class DllExport C { int i; virtual int func( void ) { return 1; } }; ``` ์ด๋Ÿฐ ์‹์œผ๋กœ dllexport๋กœ ์ง€์ •ํ•œ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋งŒ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ์™ธ์—๋„ ๋ช‡ ๊ฐ€์ง€ ์ œ์•ฝ์ด ์žˆ๋Š”๋ฐ, ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ช‡ ๋ฐฑ ์ค„์— ๋ถˆ๊ณผํ•˜๋ฉด ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ ๋ณดํ†ต ์ˆ˜๋งŒ ์ค„์— ๋‹ฌํ•˜๋Š” ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ด์ „ํ•˜๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋”๋ผ๋„ ๊ทธ๋งŒํ•œ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ผ ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ? ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๊ฐ€ ์†๋Œ€๊ธฐ ๋ฌด์„œ์šธ ์ •๋„๋กœ ๊ฑฐ๋Œ€ํ•˜์ง„ ์•Š๋‹ค๋ฉด ํ•œ๋ฒˆ ์‹œ๋„ํ•ด๋ด๋„ ์ข‹๊ฒ ๋‹ค. ์ด๋ ‡๊ฒŒ ์นผ๋Ÿผ์„ ํ†ตํ•ด ๊ฒฝํ—˜๋‹ด๊ณผ ์ง€์‹์„ ์ „๋‹ฌํ•˜๋Š” ์ž…์žฅ์ด์ง€๋งŒ ๋ชจ๋“  ๊ฑธ ํ•ด๋ณด์ง„ ์•Š์•˜๋‹ค. ์—…๋ฌด์—์„œ ๋‹ค๋ฃจ๋Š” ์„œ๋ฒ„ ์—”์ง„์€ ์ƒ๋‹นํžˆ ๊ทœ๋ชจ๊ฐ€ ์ปธ๊ธฐ ๋•Œ๋ฌธ์— dllexport ๋ฐฉ์‹์€ ๋„์ €ํžˆ ์—„๋‘๋ฅผ ๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค. ๋งŒ์•ฝ dllexport ๋ฐฉ์‹์„ ์ทจํ•œ๋‹ค๋ฉด ํ•ต์‹ฌ์ธ ์—”์ง„๋ฟ ์•„๋‹ˆ๋ผ ๊ทธ ์œ„์— ๋†“์ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์ด ๋ชจ๋‘ ๋Œ€๋Œ€์ ์ธ ์ˆ˜์ˆ ์„ ๋ฐ›์•„์•ผ ํ•  ์ƒํ™ฉ์ด์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์—”์ง„๊ณผ ๊ทธ ์œ„์˜ ๊ณ„์ธต์„ ๋ชจ๋‘ ์„ค๊ณ„ํ•œ ์‚ฌ๋žŒ ์ค‘ ํ•œ ๋ช…์ด๋ผ๋ฉด dllexport ๋ฐฉ์‹์— ๋„์ „ํ•ด๋„ ์ข‹์„์ง€ ๋ชจ๋ฅธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฐ ์ž…์žฅ์ด ์•„๋‹ˆ์—ˆ๊ธฐ์— ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ–ˆ๋‹ค. ์–‘์ชฝ ๋ชจ๋‘๋ฅผ ๊ฒฝํ—˜ํ•œ ๊ฑด ์•„๋‹ˆ๋‹ˆ ์†”์งํžˆ ์–ด๋А ์ชฝ์ด ๋” ๋‚˜์€์ง€๋Š” ๋ชจ๋ฅธ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋‹ฟ์•„ dllexport ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋˜ ์ž๋ฆฌ๋ฅผ ๋งˆ๋ จํ•ด ๋…ธํ•˜์šฐ๋ฅผ ๋‚˜๋ˆ„๊ธฐ๋กœ ํ•˜๊ณ , ์ด๋ฒˆ ์‹œ๊ฐ„์—” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ๋กœ ํ•˜์ž. ### ์ค€๋น„ ๊ณผ์ • ์ง€๊ธˆ๋ถ€ํ„ฐ ์‹ค์Šตํ•  ๋‚ด์šฉ์€ ๋ชจ๋‘ Google Code๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋œ๋‹ค. ์ €์žฅ์†Œ ์ฃผ์†Œ๋Š” <https://imaso.googlecode.com/svn/trunk/200905-TimeLib> ์ด๋‹ค. ์„œ๋ธŒ๋ฒ„์ „ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ด์šฉํ•ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‚ด๋ ค ๋ฐ›๊ฑฐ๋‚˜ [ํ”„๋กœ์ ํŠธ ํ™ˆํŽ˜์ด์ง€](https://github.com/andromedarabbit/imaso/)๋กœ ์™€์„œ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ 200905-TimeLib์€ ์‹ค์Šต ๊ณผ์ •์ด ์™„๊ฒฐ๋œ ์ตœ์ข… ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์ด ๊ทธ ๊ณผ์ •์„ ์•Œ๋ ค๋ฉด [๋ณ€๊ฒฝ ๋‚ด์—ญ](https://github.com/andromedarabbit/imaso/source/list)์—์„œ ๋ฆฌ๋น„์ „ 15๋ฒˆ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋˜๊ฐ€ ์ง€๊ธˆ๋ถ€ํ„ฐ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋”ฐ๋ผ ํ•ด์•ผ ํ•œ๋‹ค. ์šฐ์„  <https://imaso.googlecode.com/svn/trunk/200903-TimeLib> ์„ ๋‚ด๋ ค ๋ฐ›๋Š”๋‹ค. ์—ฌ๊ธฐ์—” DLL๋กœ ๋นŒ๋“œํ•œ TimeLib๊ณผ TimeLib์„ ์ฐธ์กฐํ•˜๋Š” C\# ํ”„๋กœ์ ํŠธ LogManagedTest๊ฐ€ ์žˆ๋‹ค. ์›๋ž˜ TimeLibTest์™€ UnitTest++์ด ์žˆ์—ˆ์ง€๋งŒ TimeLib์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด์„œ ๋นŒ๋“œ๊ฐ€ ๊นจ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๊ฑฐํ•œ ๋ฐ” ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ ˆ๊ฐ€์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” CLR์„ ์ง€์›ํ•˜๋„๋ก ๋ฐ”๊ฟจ์ง€๋งŒ ์•„์ง ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์†๋Œ€์ง€ ๋ชปํ•œ ์ƒํ™ฉ์ด๋‹ค. ์ด์ œ <https://imaso.googlecode.com/svn/trunk/200902-TimeLib> ๋ฅผ ๋‚ด๋ ค ๋ฐ›์ž. ์—ฌ๊ธฐ์—” UnitTest++๊ณผ TimeLibTest๊ฐ€ ์žˆ๋‹ค. ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์•„๊นŒ ๋ฐ›์€ 200903-TimeLib์— ๋„ฃ์œผ๋ฉด ์ค€๋น„๋Š” ๋๋‚œ ์…ˆ์ด๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” TimeLib์„ ์ฐธ์กฐํ•˜๋Š” TimeLibTest ํ”„๋กœ์ ํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋นŒ๋“œ๋˜๊ณ  ์ž‘๋™ํ•˜๋„๋ก ๊ณ ์น˜๋Š” ์—ฌ์ •์„ ๋– ๋‚œ๋‹ค. ### ์—ฌ์ •์˜ ์‹œ์ž‘ ์šฐ์„  TimeLib ์†”๋ฃจ์…˜ ํŒŒ์ผ(TimeLib.sln)์„ ์—ฐ๋‹ค. ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์˜ ์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ์—” LogManagedTest์™€ TimeLib๋งŒ ์žˆ๋‹ค. ์—ฌ๊ธฐ์— UnitTest++๊ณผ TimeLibTest ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž. ์ด์ œ \[ํ”„๋กœ์ ํŠธ โ€“ ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ\] ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ \[๊ทธ๋ฆผ 1\]์ฒ˜๋Ÿผ ์„ค์ •ํ•œ๋‹ค. TimeLibTest ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ ๋ฅด๊ณ  ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ TimeLib๊ณผ UnitTest++์— ์ข…์†์ ์ด๋ž€ ๊ฑธ ๋ช…์‹œํ•œ๋‹ค. ์ด์ œ TimeLibTest์˜ ์†์„ฑ ํŽ˜์ด์ง€๋กœ ๊ฐ„๋‹ค. \[C/C++ โ€“ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ\]์— "..\\TimeLib" ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋กœ์จ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” "..\\UnitTest++\\src"; "..\\TimeLib" ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆผ 1. ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ [![๊ทธ๋ฆผ 1. ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ](https://andromedarabbit.net/wp-content/uploads/2020/02/4276803540_da24710fdc_o.png)](http://www.flickr.com/photos/kaistizen/4276803540/ "๊ทธ๋ฆผ 1. ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ by CHOI, Jae-Hoon, on Flickr") ๊ผญ ํ•„์š”ํ•œ ์ ˆ์ฐจ๋Š” ์•„๋‹ˆ์ง€๋งŒ \[TimeLib ์†์„ฑ ํŽ˜์ด์ง€ โ€“ C/C++ โ€“ ์ „์ฒ˜๋ฆฌ๊ธฐ โ€“ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ •์˜\]์—์„œ \_LIB ์„ ๋นผ๋ฉด ๋” ์ข‹๋‹ค. ๋ชจ๋“  ๊ฒŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ๋Œ๋˜ 2์›”, 3์›” ๋ฌด๋ ต์œผ๋กœ ๋Œ์•„๊ฐ”๋‹ค. ๋‹จ์ง€ ๊ด€๋ฆฌ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ TimeLib์— ์ถ”๊ฐ€๋๋‹ค๋Š” ์ ๋งŒ ๋‹ค๋ฅด๋‹ค. ์ด์ œ \[๋นŒ๋“œ โ€“ ์ผ๊ด„ ๋นŒ๋“œ\] ๋ฉ”๋‰ด๋กœ ๊ฐ€ Win32 ํ”Œ๋žซํผ์— ์†ํ•˜๋Š” ๋ชจ๋“  ๋นŒ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  โ€˜๋‹ค์‹œ ๋นŒ๋“œโ€™๋ฅผ ํ•ด๋ณด์ž. ์–ด๋–ค๊ฐ€? ํ˜น์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๊ฐ€? ๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งํฌ ์˜ค๋ฅ˜๋งŒ ๋ฐœ์ƒํ•˜๋ฉด ์ œ๋Œ€๋กœ ๋œ ๊ฒƒ์ด๋‹ค. ``` LINK : fatal error LNK1181: '..\debug\timelib.lib' ์ž…๋ ฅ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ``` ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ์—†์ด ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋‹ค๋ฉด ์ด์ œ ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค. ๋งํฌ ์˜ค๋ฅ˜๋งŒ ํ•ด๊ฒฐํ•˜๋ฉด(์‰ฝ์ง„ ์•Š์ง€๋งŒ), ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋˜ ๋Œ€๋กœ ๋œ๋‹ค. ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด์„œ CLR ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ\! ### ๋ฌธ์ œ ํ•ด๊ฒฐ, ๊ทธ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ์ด์ œ๊ป ๊ฒ€ํ† ํ•œ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํ•œ์ฐธ ๊ณ ๋ฏผํ•œ ์ ์ด ์žˆ๋‹ค. ์‹œ๊ฐ„์€ ๋„‰๋„‰ํ–ˆ์ง€๋งŒ ๋ฉฐ์น  ๋™์•ˆ ์ ์ ˆํ•œ ๋ฐฉ์•ˆ์„ ์ฐพ์ง€ ๋ชปํ•ด ๋งˆ์Œ์ด ํŽธ์น˜ ์•Š์•˜๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ C++/CLI ๊ด€๋ จ ์ฑ…์€ ๋ฏธ๊ตญ์—๋„ ๋ช‡ ๊ถŒ ์•ˆ ๋˜๊ณ , ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•ด๋ณธ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋„ ๋งŽ์ง€ ์•Š์•˜๋‹ค. ์„ค์‚ฌ ๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ๋”๋ผ๋„ ๊ฒฝํ—˜๋‹ด์„ ๊ณต์œ ํ•˜์ง„ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘์— โ€œ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅโ€์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์งง์€ ๊ธ€์„ MSDN ํฌ๋Ÿผ์—์„œ ์ฝ๊ฒŒ ๋๋‹ค. ๋‹น์‹œ๋กœ์„  ํ™•์‹คํ•œ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ๋„ ์‹œ๋„ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋ฐฉ๋„๊ฐ€ ์žˆ์ง€๋„ ์•Š์•˜๊ณ . ๊ทธ๋ฆฌํ•˜์—ฌ ๋ˆ์งˆ๊ธฐ๊ฒŒ ์‚ฝ์งˆ์„ ๊ณ„์† ํ–ˆ๋‹ค. ์ด ๊ธ€์—์„  ๊ทธ ์‚ฝ์งˆ ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ„๋‹ค. ๊ณง๋ฐ”๋กœ ์ •๋‹ต์„ ๋‚ด๊ธฐ๋ณด๋‹จ ์‹ค์ˆ˜๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ์—†๋Š”์ง€ ์—ฌ๋Ÿฌ๋ถ„ ์Šค์Šค๋กœ ํŒ๋‹จํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. ํฌ๋Ÿผ์—์„œ ํžŒํŠธ๋ฅผ ๋“ฃ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋Œ€์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? MSDN์˜ ์„ค๋ช…๋ถ€ํ„ฐ ์ฝ์–ด๋ณด์ž. > ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ lib ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ ์ฆ๋ถ„ ๋งํฌ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .lib ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŽ์ด ์žˆ์œผ๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์ด ์˜ˆ๋กœ ์„ค์ •๋˜๋ฉด ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ์€ ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” .lib์˜ .obj ํŒŒ์ผ์— ๋งํฌํ•˜์—ฌ ์ฆ๋ถ„ ๋งํฌ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ง์ด ๋ณต์žกํ•œ๋ฐ ๊ฒฐ๋ก ์€ ๊ฐ„๋‹จํ•˜๋‹ค. ์›๋ž˜๋Š” TimeLib์˜ obj ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋ชจ์•„์„œ TimeLib.lib์„ ์ƒ์„ฑํ•œ๋‹ค. TimeLibTest๋ฅผ ๋นŒ๋“œํ•  ๋• TimeLib.lib๋ฅผ ์ด์šฉํ•  ๋ฟ TimeLib์˜ obj ํŒŒ์ผ์„ ๋‹ค์‹œ ๋งํฌํ•˜์ง„ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ TimeLibTest์— ์ข…์†์„ฑ ์ž…๋ ฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, TimeLibTest์„ ๋งํฌํ•  ๋•Œ TimeLib์˜ obj ํŒŒ์ผ์„ ๋˜ ๋‹ค์‹œ ๋งํฌํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜‘๊ฐ™์€ ๊ณผ์ •์„ ๋‘ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ์…ˆ์ด๋‹ค. ๊ทธ๋ž˜๋„ ์–ด์ฉŒ๊ฒ ๋Š”๊ฐ€? ๋‹น์‹œ๋กœ์„ , ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ๋„ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชป ํ–ˆ๋‹ค. ์ด์ œ \[TimeLibTest ์†์„ฑ ํŽ˜์ด์ง€ โ€“ ๋ง์ปค โ€“ ์ผ๋ฐ˜ โ€“ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ ์‚ฌ์šฉ\]์„ โ€œ์˜ˆโ€๋กœ ๋ฐ”๊พผ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด \[๋ชฉ๋ก 1์ด๋˜ ๋ช…๋ น์ค„์ด \[๋ชฉ๋ก 2\]์ฒ˜๋Ÿผ ๋ฐ”๋€๋‹ค. ๋ชฉ๋ก 1. TimeLibTest์˜ ๋งํฌ์‹œ ๋ช…๋ น์ค„ ``` /OUT:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TimeLibTest.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "..\debug\unittest++.lib" "..\debug\timelib.lib" ``` ๋ชฉ๋ก 2. ๋ฐ”๋€ ๋ช…๋ น์ค„ ``` /OUT:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TimeLibTest.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "..\unittest++\obj\unittest++\debug\timehelpers.obj" ์ค‘๋žตโ€ฆโ€ฆ "..\unittest++\obj\unittest++\debug\xmltestreporter.obj" "..\debug\timelib.lib" ``` ์ด์ œ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ํ•ด๋ณด๋ฉด ์งœ์ž”~ ``` LINK : fatal error LNK1181: '..\debug\timelib.lib' ์ž…๋ ฅ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ``` ์ด๋Ÿฐ! ์—ฌ์ „ํ•˜๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. C++ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‹ค๋ฅธ C++ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ๋ฅผ ์‹œ๋„ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ DLL๋กœ ๋ฐ”๊พผ TestLib ํ”„๋กœ์ ํŠธ์—์„œ timelib.lib ํŒŒ์ผ์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์‹ค์ œ๋กœ \[๋ชฉ๋ก 2\]์—๋Š” ์ด์ƒํ•œ ์ ์ด ์žˆ๋‹ค. TimeLibTest๋Š” ๋ถ„๋ช… TimeLib๊ณผ UnitTest++์„ ๋ชจ๋‘ ์ฐธ์กฐํ•˜๋Š”๋ฐ, \[๋ชฉ๋ก 2\]์—์„  UnitTest++์˜ obj ํŒŒ์ผ๋งŒ ๋ณด์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งจ ๋์— โ€œ..\\debug\\timelib.libโ€์ด๋ž€ ๋Œ€๋ชฉ์ด ์žˆ๋‹ค. ์ด๋Ÿฐ ํ˜„์ƒ์„ ๋ง‰๋Š” ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ์„ ์—†์• ๋Š” ๊ฒƒ์ด๋‹ค. ์ข…์†์„ฑ์„ ์—†์• ๋ฉด TimeLibTest๊ฐ€ TimeLib๋ณด๋‹ค ๋จผ์ € ๋นŒ๋“œ๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์ง€๋งŒ ์ด๋Ÿฐ ์ผ์€ ๋ง‰๊ธฐ ์‰ฝ๋‹ค. \[ํ”„๋กœ์ ํŠธ โ€“ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์ˆœ์„œ\]์—์„œ ์กฐ์ • ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ข…์†์„ฑ์„ ์—†์•ค๋‹ค๊ณ  ํ•ด์„œ TimeLib์˜ obj ํŒŒ์ผ์„ ๊ณง๋ฐ”๋กœ ๋งํฌํ•  ๋ฆฌ๋Š” ์—†๋‹ค. ์ข…์†์„ฑ์ด ์—†์œผ๋‹ˆ ๋‘ ํ”„๋กœ์ ํŠธ์˜ ๊ด€๊ณ„๋ฅผ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์•Œ ๋ฆฌ ์—†๋‹ค. ๊ทธ๋ž˜์„œ \[TimeLibTest ์†์„ฑ ํŽ˜์ด์ง€ โ€“ ๋ง์ปค โ€“ ์ž…๋ ฅ โ€“ ์ถ”๊ฐ€ ์ข…์†์„ฑ\]์— โ€œTimeLib\\\$(ConfigurationName)\\\*.objโ€๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ˆ˜๋™์œผ๋กœ obj ํŒŒ์ผ์„ ๊ฐ€์ ธ๋‹ค ๋งํฌํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค. ์‹ค์ œ๋กœ ์ด์ฏค์—์„œ TimeLibTest๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋Œ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ์ž‘๋™ํ•œ๋‹ค. ``` Success: 6 tests passed. Test time: 0.04 seconds. ๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . . ``` **์ฐธ๊ณ **. ์ด ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์žฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ [๋ฆฌ๋น„์ „ 18](https://github.com/andromedarabbit/imaso/source/detail?r=18)์„ ๋‚ด๋ ค ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ### ๋” ๋‚˜์€ ์‹œ๋„ ์ฒ˜์Œ์—” ์œ„์˜ ๋ฐฉ๋ฒ•์— ๋งŒ์กฑํ–ˆ๋‹ค. ๋งํฌ๋ฅผ ํ•œ๋ฒˆ ๋” ํ•˜๋‹ˆ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋А๋ ค์ง€๊ธด ํ–ˆ์ง€๋งŒ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๋œฏ์–ด๊ณ ์น˜๋Š” ๊ฒƒ๋ณด๋‹จ ๋‚ซ์ง€ ์•Š์€๊ฐ€? ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์œผ๋‹ˆ, ํŠน์ • ๋นŒ๋“œ์‹œ ๋ฏธ๋ฌ˜ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•œ ์ƒ˜ํ”Œ๋กœ๋Š” ์žฌํ˜„ํ•˜๊ธฐ ํž˜๋“ค๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›์ธ์€ ๋ถ„๋ช…ํ•œ๋ฐ โ€œTimeLib\\\$(ConfigurationName)\\\*.objโ€์ด ๊ณจ์น˜๊ฑฐ๋ฆฌ์˜€๋‹ค. ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” Obj ํŒŒ์ผ์„ ๋ชจ๋‘ ๋งํฌ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. TimeLib\\Debug\\ ํด๋”์— TimeLib์˜ obj ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ, TimeLib์ด ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ(๊ทธ๋Ÿด ์ •๋„๋กœ ๋ณต์žกํ•œ ๊ตฌ์„ฑ์ด๋ผ๋ฉด)์˜ obj ํŒŒ์ผ์ด ๋“ค์–ด ์žˆ์–ด์„œ ๋งํฌ๊ฐ€ ๊ผฌ์ธ ๊ฒƒ์ด๋‹ค. \[๋ชฉ๋ก 2\]์—์„œ์ฒ˜๋Ÿผ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์•Œ์•„์„œ ํ•„์š”ํ•œ obj ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ์ด๋Ÿฐ ์ผ์ด ์—†๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋ก  ์š”์›ํ•œ ์ผ์ด๋‹ค. ๊ทธ๋Ÿฐ ๊นŒ๋‹ญ์— ๋นŒ๋“œ ์ข…์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ถ”๊ฐ€ ์ข…์†์„ฑ์— โ€œTimeLib\\\$(ConfigurationName)\\\*.objโ€๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์ด ์—†๋Š”๊ฐ€ ๊ณ ๋ฏผํ•œ ๊ฒƒ์ด๋‹ค. ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ ๋ฐฉ๋ฒ•์€ ์žˆ์—ˆ๋‹ค. ์˜์™ธ๋กœ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‹ค๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์—ฌํƒœ๊นŒ์ง€ ์‚ดํŽด๋ณธ ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ์•ฝ๊ฐ„ ๋’ค์ง‘๊ธด ํ•ด์•ผ ํ•œ๋‹ค. ๋” ์ž์„ธํžˆ ๋“ค์—ฌ๋‹ค ๋ณด๊ธฐ ์ „์— /clr ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ๋‹ค์‹œ ๊ฒ€ํ† ํ•ด๋ณด์ž. C++/CLI ํ”„๋กœ์ ํŠธ๋ฅผ /clr ์ปดํŒŒ์ผํ•  ๋•Œ ์„ ํƒํ• ๋งŒํ•œ ์ „๋žต์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€์ด๋‹ค. - ํ”„๋กœ์ ํŠธ ์ „์ฒด์— /clr ์˜ต์…˜์„ ์ฃผ๊ณ , ๋ชจ๋“  cpp ํŒŒ์ผ์„ /clr ์ปดํŒŒ์ผํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ CLR ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์“ฐ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค. ์ˆœ์ˆ˜ํ•œ CLR ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ์“ธ๋งŒํ•œ ์ „๋žต์ด์ง€๋งŒ, ๋„ค์ดํ‹ฐ๋ธŒ C++ ๊ธฐ๋Šฅ๋งŒ ์“ฐ๋Š” ์ฝ”๋“œ ํŒŒ์ผ๊นŒ์ง€ /clr ์ปดํŒŒ์ผ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ์ƒ์˜ ํ•˜๋ฝ์€ ํ•„์—ฐ์ ์ด๋‹ค. ์ถ”์ฒœํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. - Expert C++/CLI๋ž€ ์ฑ…์—์„œ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด๋ ‡๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด ์„ค์ •์—์„  /clr์„ ๋บ€๋‹ค. CLR ๊ธฐ๋Šฅ์„ ์“ฐ๋Š” ์ฝ”๋“œ ํŒŒ์ผ๋งŒ ๋”ฐ๋กœ ์˜ต์…˜์„ ์ค€๋‹ค. - ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ์ •๋ฐ˜๋Œ€๋กœ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด ์„ค์ •์— /clr ์˜ต์…˜์„ ์ฃผ๊ณ , ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ํŒŒ์ผ์—๋งŒ /clr ์˜ต์…˜์„ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ์ด ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœ์ ํŠธ๋ฅผ CLR ํ”„๋กœ์ ํŠธ๋กœ ํ™•์žฅํ•  ๋• ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์„ ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌํƒœ๊นŒ์ง€ Expert C++/CLI๋ž€ ์ฑ…์ด ์ œ์‹œํ•œ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ž๋‹ค. ์‚ฌ์‹ค ์ด ๋ฐฉ๋ฒ•์ด ์ข‹๊ธด ํ•˜๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ์†Œ์Šค ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ์˜ต์…˜์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ด€๋ฆฌ๋˜๋Š” ์†Œ์Šค ํŒŒ์ผ๋งŒ ์†๋ณธ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ ๋‹ค. ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ๊ธฐ๋Šฅ ํ™•์žฅ์ด๋ผ ์ด์ƒ์ ์ด์ง€ ์•Š์€๊ฐ€? ์•ˆํƒ€๊นŒ์šด ์ผ์ด์ง€๋งŒ dllexport๊ฐ€ ์•„๋‹Œ obj ํŒŒ์ผ ๋งํฌ๋ฅผ ํ•  ๋• ์„ธ ๋ฒˆ์งธ ๋ฐฉ์‹์ด ๋” ๋‚ซ๋‹ค. TimeLib ํ”„๋กœ์ ํŠธ ์„ค์ •์— /clr ์˜ต์…˜์„ ์ฃผ์–ด์•ผ ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” TimeLibTest๊ฐ€ TimeLib์ด ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก  ๊ทธ ๋งŽ์€ ๊ธฐ์กด ์†Œ์Šค ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์†Œ์Šค ํŒŒ์ผ์„ ๋“œ๋ž˜๊ทธ ๋“ฑ์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ์„ ํƒํ•ด ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๋‹จ๋ฒˆ์— ๋ฐ”๊พธ๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€ TimeLib ํ”„๋กœ์ ํŠธ์— /clr์„ ์ ์šฉํ•˜๊ณ , ์ปดํŒŒ์ผ ์˜ต์…˜์„ ์ ์ ˆํžˆ ๊ณ ์น˜๋Š” ๊ฒƒ์ด๋‹ค. ์ปดํŒŒ์ผ ์˜ต์…˜์€ 2์›” ์นผ๋Ÿผ์— ๋”ฐ๋ผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ์—” ์ง€๋ฉด์ด ๋ชจ์ž๋ผ๋‹ˆ ์ง€๋‚œ ์นผ๋Ÿผ์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋งˆ์ณค์œผ๋ฉด ์ผ๋‹จ๋ฝ๋๋‹ค. ๋ฐ”๋กœ ๋นŒ๋“œํ•ด์„œ ๋Œ๋ ค๋ณด๋ฉด ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 6๊ฐœ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•œ๋‹ค. ``` Success: 6 tests passed. Test time: 0.04 seconds. ๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . . ``` **์ฐธ๊ณ **. ์ด ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์žฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ [๋ฆฌ๋น„์ „ 19](https://github.com/andromedarabbit/imaso/source/detail?r=19)์„ ๋‚ด๋ ค ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ### ๋‹น๋ถ€์˜ ๋ง 100% ํ™•์‹ ํ•˜์ง„ ๋ชปํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ ๋ฐ ๋งํฌ ์˜ต์…˜์„ ๊นŠ์ˆ™ํ•˜๊ฒŒ ํŒŒ๊ณ ๋“œ๋Š” ์ž๋ฃŒ๋Š” ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ, ์‚ฌ๋žŒ๋“ค์€ ์ด์ƒํ•˜๊ฒŒ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํŠน์ง•์—๋Š” ๊ด€์‹ฌ์„ ๋‘์ง€๋งŒ ์˜์™ธ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—” ์†Œํ™€ํ•œ ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ์‚ฌ์‹ค ํ•™๊ต ์ˆ™์ œ๋‚˜ ์†Œ๊ทœ๋ชจ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„  ๋นŒ๋“œ ๊ตฌ์„ฑ์ด ๊ทธ๋ฆฌ ์ค‘์š”ํ•˜์ง„ ์•Š๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋งŽ์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์งง๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. C++์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅธ C\# ๋“ฑ์„ ๋‹ค๋ฃฐ ๋•Œ๋„ ์ปดํŒŒ์ผ ์˜ต์…˜์— ์ฃผ์˜๋ฅผ ๋œ ๊ธฐ์šธ์ธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๊ทœ๋ชจ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์šด์šฉํ•ด๋ณด๋‹ˆ ์ ์ ˆํ•œ ๋นŒ๋“œ ๊ตฌ์„ฑ์ด ์–ผ๋งˆ๋‚˜ ํฐ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค. ์šฐ์„  ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ๋ฉด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ง€์—ฐ๋œ๋‹ค. ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ๊ณ ์ณค์„ ๋ฟ์ธ๋ฐ 5๋ถ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ํŒ€๊ณผ ๋˜‘ ๊ฐ™์€ ์‹œ๊ฐ„์— ํ”„๋กœ์ ํŠธ ๋Œ€ ์—ฌ์„ฏ ๊ฐœ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์ด ๊ฐ™์€ ์ˆœ ์—†๋‹ค. ๋‹จ์ˆœํžˆ ์‹œ๊ฐ„์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ „์ž์™€ ๊ฐ™์€ ํŒ€ ํ™˜๊ฒฝ์—์„  ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธˆ์„ธ ์ง€์น˜๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ํ•‘๊ณ„ ์‚ผ์•„ ๋‹ค๋ฅธ ์ผ์— ์—ด์ค‘ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๋นŒ๋“œ ์‹œ๊ฐ„๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๋นŒ๋“œ๋ฅผ ์ ์ ˆํžˆ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฒ„๊ทธ๋ฅผ ์กฐ๊ธฐ์— ์žก์„ ์ˆ˜๋„ ์žˆ๋‹ค. โ€˜๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌโ€™๋‚˜ โ€˜์ž‘์€ ํ˜•์‹ ๊ฒ€์‚ฌโ€™ ๊ฐ™์€ ์˜ต์…˜์ด ๊ทธ๋Ÿฐ ์˜ˆ์— ์†ํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ด๋Ÿฐ ์˜ต์…˜์„ ์ ์šฉํ•˜๊ณ  ํ•œ๋™์•ˆ ๋ฒ„๊ทธ๋ฅผ ์ƒ๋‹นํžˆ ์žก์•„๋ƒˆ๋‹ค. ์ƒ์‚ฐ์„ฑ์„ ์ •๋ง ๋†’์ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ตœ์†Œํ•œ ํŒ€ ๊ตฌ์„ฑ์› ์ค‘ ํ•œ ๋ช…์€ ์ง€์†์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์„ ๊ฒ€ํ† ํ•˜๊ณ  ์ตœ์ ํ™”ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ, ์ด๋Ÿฐ ์—…๋ฌด๋Š” ์ง€๋ฃจํ•˜๊ณ  ์‚ฌ๋žŒ์„ ์ง€์น˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ๋ณด์ƒ์ด ๋”ฐ๋ผ์•ผ ์ข‹๋‹ค. ๋ณด๋„ˆ์Šค๋กœ ๋ฉ‹์ง„ ๋…ธํŠธ๋ถ์„ ์‚ฌ์ค„ ํ•„์š”์•ผ ์—†๊ฒ ์ง€๋งŒ ๊ฐ€๋” ๋–ก๋ณถ์ด๋ผ๋„ ์‚ฌ์ฃผ๋ฉด ์ข‹์ง€ ์•Š์„๊นŒ? ์•„๋‹ˆ๋ฉด ์ด ์—…๋ฌด๋ฅผ ํŒ€ ๊ตฌ์„ฑ์›์ด ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉด ๋งก์•„๋„ ์ข‹๊ฒ ๋‹ค. ### ๋๋งˆ์น˜๋Š” ๋ง ๊ฝค ๋ณต์žกํ•œ ์‹ค์Šต์ด์—ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋”ฐ๋ผ์˜จ ๊ฒƒ๋งŒ ํ•ด๋„ ์‰ฝ์ง„ ์•Š์•˜์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๋‹ค๋ฃจ์ง€๋„ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ๋ก€ ๊ณต๋ถ€๋กœ๋Š” ๋‚˜๋ฆ„ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ฏฟ๋Š”๋‹ค. ์‹ค๋ฌด์—์„œ ๋‹ค๋ฃฌ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์€ ์ด ์™ธ์—๋„ ๋ช‡ ๊ฐ€์ง€๊ฐ€ ๋” ์žˆ๋‹ค. ๋‹น์žฅ ๋‹ค์Œ ์นผ๋Ÿผ์— ์ด๋Ÿฐ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃฐ์ง€๋Š” ์กฐ๊ธˆ ๋” ๊ณ ๋ฏผํ•ด๋ณผ ๋ฌธ์ œ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ ์ ˆํ•œ ์‹œ์ ์ด๋‹ค ์‹ถ์„ ๋•Œ ๋‹ค๋ฅธ ์‚ฌ๋ก€๋„ ๋‹ค๋ฃฐ ์ƒ๊ฐ์ด๋‹ˆ ๋А๊ธ‹ํ•˜๊ฒŒ ๊ธฐ๋‹ค๋ ค์ฃผ๊ธธ ๋ฐ”๋ž€๋‹ค. - Author Details Author Details ![](https://pbs.twimg.com/profile_images/1494288156799410178/y06Rnt5w_bigger.jpg) [์ตœ ์žฌํ›ˆ](https://andromedarabbit.net/author/plaintext/) Kubernetes, DevSecOps, AWS, ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ, ํด๋ผ์šฐ๋“œ ๋น„์šฉ๊ด€๋ฆฌ, SaaS ์˜ ํ™œ์šฉ๊ณผ ๋‚ด์žฌํ™” ๋“ฑ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ „๋ฐ˜์— ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”. ์ง€์ธ์ด๋ผ๋ฉด ๊ฐ€๋ณ๊ฒŒ ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „๋ฌธ์ ์ธ ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ €์˜ ํ˜„์—…์— ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์„ ์—์„œ ํ˜‘์˜๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. <https://twitter.com/andromedarabbit> [plaintext@andromedarabbit.net](https://andromedarabbit.net/cdn-cgi/l/email-protection#e59589848c8b91809d91a5848b81978a88808184978487878c91cb8b8091) Tags: [๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์›จ์–ด](https://andromedarabbit.net/tag/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/), [์นผ๋Ÿผ](https://andromedarabbit.net/tag/%EC%B9%BC%EB%9F%BC/), [C++/CLI](https://andromedarabbit.net/tag/ccli/) 0 0 votes Article Rating Subscribe [Login](https://andromedarabbit.net/wp-login.php?redirect_to=https%3A%2F%2Fandromedarabbit.net%2F2009%2F05%2F16%2Fcplusplus_cli_lecture_2009_05%2F) This site uses Akismet to reduce spam. [Learn how your comment data is processed.](https://akismet.com/privacy/) 0 Comments Oldest Newest Most Voted Inline Feedbacks View all comments #### Recent Comments - Name on [๋ง‰๋ง ๊ฐœ๋ฐœ 2023-11-22](https://andromedarabbit.net/2023/11/22/%EB%A7%89%EB%A7%90-%EA%B0%9C%EB%B0%9C-2023-11-22/#comment-4219) - ์ตœ ์žฌํ›ˆ on [๋ง‰๋ง ๊ฐœ๋ฐœ 2023-11-22](https://andromedarabbit.net/2023/11/22/%EB%A7%89%EB%A7%90-%EA%B0%9C%EB%B0%9C-2023-11-22/#comment-4218) - Name on [๋ง‰๋ง ๊ฐœ๋ฐœ 2023-11-22](https://andromedarabbit.net/2023/11/22/%EB%A7%89%EB%A7%90-%EA%B0%9C%EB%B0%9C-2023-11-22/#comment-4216) #### Projects - [Zlib Library Manual](https://old-projects.andromedarabbit.net/src/zip/index.html "2003.02.07 ์— ETRI์—์„œ ํ˜„์žฅ์‹ค์Šตํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ์ž๋ฃŒ์ด๋‹ค.") - [Windows ๊ธฐ๋ฐ˜์˜ ๋„คํŠธ์›Œํฌ ์—”์ง„ ๊ฐœ๋ฐœ](https://andromedarabbit.net/tag/%EC%96%BC%EA%B7%B8%EB%A0%88%EC%9D%B4/ "ํ”„๋กœ์ ํŠธ Earlgrey๋Š” ๊ฒŒ์ž„ ์„œ๋ฒ„ ์—”์ง„์„ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ณธ๋ž˜ ๋ชฉ์ ๊ณผ ๋‹ฌ๋ฆฌ ์ž๋™ํ™” ๋„๊ตฌ ๊ฐœ๋ฐœ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค๋งŒ ์—”์ง„ ๊ฐœ๋ฐœ์€ ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„์ด ๊ณ„์‹œ๋ฉด ํ•จ๊ป˜ ์ง„ํ–‰ํ•ด ๋‚˜๊ฐ€๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.") - [Mac OS X์šฉ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ง‘](https://github.com/andromedarabbit/Useful-Mac-OS-X-Scripts "GitHub์— ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ์„คํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ Mac OS X์—์„œ ์“ธ ๊ฐ์ข… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ชจ์๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—…์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—…๋ฌด์™€ ๊ด€๋ จ์ด ์žˆ์–ด๋„ ์ข‹๊ณ  Dock์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„์—ฌ๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ฐธ์—ฌ ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.") - [Adguard KR](http://adguard-kr.unchartedsky.com/ "Adguard ํ•„ํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.") - [Windows ์ž๋™ํ™” ๋„๊ตฌ ๊ฐœ๋ฐœ](https://andromedarabbit.net/tag/%EC%96%BC%EA%B7%B8%EB%A0%88%EC%9D%B4/ "ํ”„๋กœ์ ํŠธ Earlgrey์—์„œ MSBuild ํ™•์žฅ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ƒ์šฉ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€๊นŒ์ง€ ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค๋งŒ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ์‹œ๊ฐ„์ด ์ค„์–ด๋“œ๋Š” ์ค‘์ด๋ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฐธ์—ฌ๊ฐ€ ์ ˆ์‹คํ•ฉ๋‹ˆ๋‹ค.") - [Mac OS X ์ฑ… ์“ฐ๊ธฐ](https://andromedarabbit.net/tag/Mac-OS-X-%EC%B1%85-%EC%93%B0%EA%B8%B0/ "Windows ๊ณจ์ˆ˜ ๋ถ„์ž๊ฐ€ Mac OS X์œผ๋กœ ๋„˜์–ด์˜ค๋ฉฐ ๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค์™€ ๊ฒฝํ—˜์„ ๋ชจ์•„ ์ฑ…์œผ๋กœ ์—ฎ์œผ๋ ค ํ–ˆ์Šต๋‹ˆ๋‹ค.") - [๋‹จ์ˆœํ•˜๊ฒŒ ์‚ด๊ธฐ](https://andromedarabbit.net/tag/%EB%8B%A8%EC%88%9C%ED%95%98%EA%B2%8C-%EC%82%B4%EA%B8%B0 "๋‹จ์ˆœํ•˜๊ฒŒ ์‚ด๊ณ ์ž ํ•˜๋Š” ์ผ์ด ์—ฌ๋Ÿฟ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ƒ๊ฐ๊ณผ ๋‹ฌ๋ฆฌ ๋‹จ์ˆœํ•˜๊ฒŒ ์‚ด๋ ค๋ฉด ๋ˆ์ด ์˜คํžˆ๋ ค ๋” ๋“ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์•ผ ํ•  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ทจ์ง€๋ฅผ ํฌ๊ด„์ ์œผ๋กœ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.") - [Amazon.com](https://old-projects.andromedarabbit.net/src/amazon/index.html "2003.03.07 ์— ์“ด ๋Œ€ํ•™ ๊ณผ์ œ๋ฌผ๋กœ์„œ ์•„๋งˆ์กด๋‹ท์ปด์ด ๊ฐ€ํŒŒ๋ฅด๊ฒŒ ์ƒ์Šนํ•˜๋˜ ์ดˆ๊ธฐ ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.") Copyright - WordPress Theme by OceanWP wpDiscuz 0 0 Would love your thoughts, please comment.[x](https://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/) () [x](https://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/) \| [Reply](https://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/) Insert
Readable Markdown
**[์ตœ์žฌํ›ˆ](https://andromedarabbit.net/ "์ €์ž ๋ธ”๋กœ๊ทธ")** \| SK ์•„์ด๋ฏธ๋””์–ด์˜ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํŒ€์—์„œ ์ผํ•œ๋‹ค. ์š”์ฆ˜์€ ์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์ „๋…ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋„์ „์„ ์ฆ๊ธด๋‹ค. ์ง์—… ์™ธ์ ์ธ ์ธก๋ฉด์—์„  ๋ฐฐ์ฒ ์ˆ˜์˜ ์Œ์•… ์บ ํ”„๋ฅผ 15๋…„์งธ ์ฆ๊ฒจ ๋“ฃ๊ณ , U2๊ฐ€ ์ตœ๊ณ ์˜ ๋ฐด๋“œ๋ผ ์ƒ๊ฐํ•œ๋‹ค. C++/CLI๋ฅผ ๋‹ค๋ฃจ๋ฉด ๋‚œํ•ดํ•œ ๋ฌธ๋ฒ•์— ๋ง‰ํž ๋•Œ๊ฐ€ ๋งŽ๋‹ค. C++, C\#์„ ๋”ฐ๋กœ ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค C++/CLI๋ฅผ ๋ฐฐ์šฐ๋Š”๋ฐ ๋” ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ๊ฐœ์ธ์ ์ธ ํŽธ๊ฒฌ์ผ์ง€ ๋ชจ๋ฅด๋‚˜ ๊ทธ๋งŒํผ ์–ธ์–ด ์Šต๋“์ด ์–ด๋ ต๊ณ , ์ด์— ๋™์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋„ ๊ฝค ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ๋ฒ•์€ MSDN ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋’ค์ ์ด๋ฉด ์–ด๋–ป๊ฒŒ๋“  ํ•ด๊ฒฐ์ด ๋œ๋‹ค. ์˜คํžˆ๋ ค ์ง„์งœ ํฐ ๋„์ „์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ฐธ๊ณ  ์„œ์ ์€ C++/CLI์˜ ๋ฌธ๋ฒ•์ด๋‚˜ ๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์†Œ๊ฐœํ•˜๊ธฐ ๋ฐ”์˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์‹ค๋ฌด์—์„œ ๊ฒช์„ ๊ณ ๋ฏผ์€ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•  ๋• ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์ธ ๋ฌธ์ œ๋ณด๋‹จ ์ปดํŒŒ์ผ์ด๋‚˜ ๋งํฌ ์ตœ์ ํ™” ๋•Œ๋ฌธ์— ๋” ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ๋” ๊ณ ์ƒ์„ ํ•œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฌ ์ง€์นจ์„œ๋Š” ๋ณธ ์ ์ด ์—†๋‹ค. ์•ž์œผ๋กœ ๋‹ค๋ฃฐ ๋‚ด์šฉ์€ ๋ชจ๋‘ ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์— ๊ทผ๊ฑฐํ•œ๋‹ค. ๊ธ€ ์“ฐ๋Š” ์ž์‹ ์กฐ์ฐจ ์ด๊ฒƒ์ด ์ตœ์ ์ธ์ง€ ํ™•์‹ ํ•˜์ง„ ๋ชปํ•œ๋‹ค. ๋‹ค๋งŒ, ํ•˜๋‚˜์˜ ์„ฑ๊ณต ์‚ฌ๋ก€๋กœ์จ ๊ทธ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์˜ ์„ ํƒ์ด์ž ๋ฐ”์ด๋ธ”์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ , ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ์—†๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์ ˆํ•œ ๋Œ€์•ˆ์„ ์ฐพ์•„๋ƒˆ๋‹ค๋ฉด ๋ชจ์ชผ๋ก ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ณต๊ฐœํ•ด์คฌ์œผ๋ฉด ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ๋ฐ”๋žจ์ด ์žˆ๋‹ค. ### ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋ฐ”๊พธ๊ธฐ ์ง€๋‚œ ์นผ๋Ÿผ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์„ ๋˜์งš์–ด๋ณด์ž. 3์›”์— ๋งŒ๋“  TimeLib(์„œ๋ธŒ๋ฒ„์ „ ์ €์žฅ์†Œ ์ฃผ์†Œ: <https://imaso.googlecode.com/svn/trunk/200902-TimeLib>)์€ ํฌ๊ฒŒ ์„ธ ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. - TimeLib - UnitTest++ - TimeLibTest TimeLib์ด ์ฃผ ํ”„๋กœ์ ํŠธ์ด๊ณ  TimeSpan ๋“ฑ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฃผ์ฒด์ด๋‹ค. UnitTest++์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. TimeLibTest์€ UnitTest++์„ ํ™œ์šฉํ•ด TimeLib์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•œ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ ์„ธ ๊ฐœ๋Š” ๋ชจ๋‘ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Lib)์˜€๊ณ  ์•„์ง ๊ด€๋ฆฌ๋˜๋Š” ํด๋ž˜์Šค๋Š” ์—†์—ˆ๋‹ค. ์•„๋‹ˆ, ์‚ฌ์‹ค์€ LogManaged๋ž€ ๊ด€๋ฆฌ๋˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ธด ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์ด ํด๋ž˜์Šค๋ฅผ ์‹ค์ œ๋กœ ์“ฐ์ง„ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋  ๊ฒŒ ์—†์—ˆ๋‹ค. ์ด์ฏค์—์„œ ์ด ์นผ๋Ÿผ์—์„œ ๋‹ค๋ฃจ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋– ์˜ฌ๋ ค๋ณด์ž. ์šฐ๋ฆฌ๋Š” CLR ๊ธฐ๋Šฅ์ด ์—†๋Š” ์ˆœ์ˆ˜ ๋„ค์ดํ‹ฐ๋ธŒ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฃจ๋Š” ๊ฐœ๋ฐœ์ž๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋А ๋‚  ๋ฌด์Šจ ์ด์œ ์—์„ ์ง€ ๊ธฐ์กด ์ฝ”๋“œ์— CLR์„ ๋ถ™์ด๊ธฐ๋กœ ๊ฒฐ์ •๋๋‹ค. C++์šฉ XML ํŒŒ์„œ์˜ ๋ณต์žก์„ฑ ๋•Œ๋ฌธ์— ๋จธ๋ฆฌ๊ฐ€ ๊นจ์งˆ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ด์œ ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์•„๋‹ˆ๋ฉด ๊ทธ์ € .NET Framework ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ๊ฒŒ ์ผ์ƒ์˜ ์†Œ์›์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด์œ ์•ผ ์–ด๋–ป๋“  C++/CLI๋ž€ ์ตœ์‹  ๊ธฐ์ˆ ๋กœ ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ท๋„ท์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํฌ์žฅํ•˜๊ธฐ๋กœ ํ•œ ์ƒํ™ฉ์ด๋‹ค. ์ด ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ 4์›” ์นผ๋Ÿผ์—์„  LogManaged ํด๋ž˜์Šค๋ฅผ C\# ์ฝ”๋“œ์—์„œ ํ˜ธ์ถœํ•ด๋ดค๋‹ค. ๊ทธ ๊ณผ์ •์€ ๋ฌด์ฒ™ ๊ฐ„๋‹จํ–ˆ์œผ๋‹ˆ, TimeLib.lib์„ TimeLib.dll๋กœ ๋นŒ๋“œํ•˜๊ณ , C\# ํ”„๋กœ์ ํŠธ์—์„œ TimeLib.dll์„ ์ฐธ์กฐํ–ˆ์„ ๋ฟ์ด๋‹ค. ๊ทธ๋Ÿฐ ํ›„ C\# ์†Œ์Šค ํŒŒ์ผ์— LogManage.Write("does it work?");๋ผ๊ณ  ์ ์œผ๋‹ˆ ์ฝ˜์†” ์ฐฝ์— "does it work?"๋ž€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋–ด๋‹ค. ์ฐธ ์‰ฝ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€๊ฐ€? ๋ช…์„ํ•œ ์—ฌ๋Ÿฌ๋ถ„์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ˆˆ์น˜์ฑ˜์œผ๋ฆฌ๋ผ ๋ฏฟ๋Š”๋‹ค. ๋ฌธ์ œ๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Lib)์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Dll)๋กœ ๋ฐ”๊พธ๋Š” ๋ถ€๋ถ„์ด๋‹ค. TimeLib์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ”๊พธ๋Š” ๊ฑฐ์•ผ ์–ด๋ ต์ง€ ์•Š๋‹ค. ํ”„๋กœ์ ํŠธ ์†์„ฑ ์ฐฝ์— ๊ฐ€์„œ ๊ตฌ์„ฑ ํ˜•์‹์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ”๊พธ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TimeLib์„ ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–จ๊นŒ? ์—ฌ๊ธฐ์„  TimeLib์„ ํ…Œ์ŠคํŠธํ•˜๋Š” TimeLibTest๊ฐ€ ๊ทธ ๋‹น์‚ฌ์ž๊ฐ€ ๋˜๋Š”๋ฐ, ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ง€๋งŒ ๋นŒ๋“œ๊ฐ€ ๊นจ์ง„๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ์ฐธ์กฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ๋ฌผ๋ก  ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ์žฅ์ ๋„ ์žˆ์ง€๋งŒ, ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ ํ˜•์‹์„ ๋ฐ”๊พผ๋‹ค๋ฉด ๊ทธ์•ผ๋ง๋กœ ์žฌ์•™์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ ค๋ฉด dllexport๋ผ๋Š” ๋ฐฉ์‹์„ ์ทจํ•ด์•ผ ํ•œ๋‹ค. ``` #define DllExport __declspec( dllexport ) class DllExport C { int i; virtual int func( void ) { return 1; } }; ``` ์ด๋Ÿฐ ์‹์œผ๋กœ dllexport๋กœ ์ง€์ •ํ•œ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋งŒ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ์™ธ์—๋„ ๋ช‡ ๊ฐ€์ง€ ์ œ์•ฝ์ด ์žˆ๋Š”๋ฐ, ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ช‡ ๋ฐฑ ์ค„์— ๋ถˆ๊ณผํ•˜๋ฉด ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ ๋ณดํ†ต ์ˆ˜๋งŒ ์ค„์— ๋‹ฌํ•˜๋Š” ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ด์ „ํ•˜๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋”๋ผ๋„ ๊ทธ๋งŒํ•œ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ผ ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ? ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๊ฐ€ ์†๋Œ€๊ธฐ ๋ฌด์„œ์šธ ์ •๋„๋กœ ๊ฑฐ๋Œ€ํ•˜์ง„ ์•Š๋‹ค๋ฉด ํ•œ๋ฒˆ ์‹œ๋„ํ•ด๋ด๋„ ์ข‹๊ฒ ๋‹ค. ์ด๋ ‡๊ฒŒ ์นผ๋Ÿผ์„ ํ†ตํ•ด ๊ฒฝํ—˜๋‹ด๊ณผ ์ง€์‹์„ ์ „๋‹ฌํ•˜๋Š” ์ž…์žฅ์ด์ง€๋งŒ ๋ชจ๋“  ๊ฑธ ํ•ด๋ณด์ง„ ์•Š์•˜๋‹ค. ์—…๋ฌด์—์„œ ๋‹ค๋ฃจ๋Š” ์„œ๋ฒ„ ์—”์ง„์€ ์ƒ๋‹นํžˆ ๊ทœ๋ชจ๊ฐ€ ์ปธ๊ธฐ ๋•Œ๋ฌธ์— dllexport ๋ฐฉ์‹์€ ๋„์ €ํžˆ ์—„๋‘๋ฅผ ๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค. ๋งŒ์•ฝ dllexport ๋ฐฉ์‹์„ ์ทจํ•œ๋‹ค๋ฉด ํ•ต์‹ฌ์ธ ์—”์ง„๋ฟ ์•„๋‹ˆ๋ผ ๊ทธ ์œ„์— ๋†“์ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์ด ๋ชจ๋‘ ๋Œ€๋Œ€์ ์ธ ์ˆ˜์ˆ ์„ ๋ฐ›์•„์•ผ ํ•  ์ƒํ™ฉ์ด์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์—”์ง„๊ณผ ๊ทธ ์œ„์˜ ๊ณ„์ธต์„ ๋ชจ๋‘ ์„ค๊ณ„ํ•œ ์‚ฌ๋žŒ ์ค‘ ํ•œ ๋ช…์ด๋ผ๋ฉด dllexport ๋ฐฉ์‹์— ๋„์ „ํ•ด๋„ ์ข‹์„์ง€ ๋ชจ๋ฅธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฐ ์ž…์žฅ์ด ์•„๋‹ˆ์—ˆ๊ธฐ์— ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ–ˆ๋‹ค. ์–‘์ชฝ ๋ชจ๋‘๋ฅผ ๊ฒฝํ—˜ํ•œ ๊ฑด ์•„๋‹ˆ๋‹ˆ ์†”์งํžˆ ์–ด๋А ์ชฝ์ด ๋” ๋‚˜์€์ง€๋Š” ๋ชจ๋ฅธ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋‹ฟ์•„ dllexport ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋˜ ์ž๋ฆฌ๋ฅผ ๋งˆ๋ จํ•ด ๋…ธํ•˜์šฐ๋ฅผ ๋‚˜๋ˆ„๊ธฐ๋กœ ํ•˜๊ณ , ์ด๋ฒˆ ์‹œ๊ฐ„์—” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ๋กœ ํ•˜์ž. ### ์ค€๋น„ ๊ณผ์ • ์ง€๊ธˆ๋ถ€ํ„ฐ ์‹ค์Šตํ•  ๋‚ด์šฉ์€ ๋ชจ๋‘ Google Code๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋œ๋‹ค. ์ €์žฅ์†Œ ์ฃผ์†Œ๋Š” <https://imaso.googlecode.com/svn/trunk/200905-TimeLib> ์ด๋‹ค. ์„œ๋ธŒ๋ฒ„์ „ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ด์šฉํ•ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‚ด๋ ค ๋ฐ›๊ฑฐ๋‚˜ [ํ”„๋กœ์ ํŠธ ํ™ˆํŽ˜์ด์ง€](https://github.com/andromedarabbit/imaso/)๋กœ ์™€์„œ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ 200905-TimeLib์€ ์‹ค์Šต ๊ณผ์ •์ด ์™„๊ฒฐ๋œ ์ตœ์ข… ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์ด ๊ทธ ๊ณผ์ •์„ ์•Œ๋ ค๋ฉด [๋ณ€๊ฒฝ ๋‚ด์—ญ](https://github.com/andromedarabbit/imaso/source/list)์—์„œ ๋ฆฌ๋น„์ „ 15๋ฒˆ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋˜๊ฐ€ ์ง€๊ธˆ๋ถ€ํ„ฐ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋”ฐ๋ผ ํ•ด์•ผ ํ•œ๋‹ค. ์šฐ์„  <https://imaso.googlecode.com/svn/trunk/200903-TimeLib> ์„ ๋‚ด๋ ค ๋ฐ›๋Š”๋‹ค. ์—ฌ๊ธฐ์—” DLL๋กœ ๋นŒ๋“œํ•œ TimeLib๊ณผ TimeLib์„ ์ฐธ์กฐํ•˜๋Š” C\# ํ”„๋กœ์ ํŠธ LogManagedTest๊ฐ€ ์žˆ๋‹ค. ์›๋ž˜ TimeLibTest์™€ UnitTest++์ด ์žˆ์—ˆ์ง€๋งŒ TimeLib์„ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด์„œ ๋นŒ๋“œ๊ฐ€ ๊นจ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๊ฑฐํ•œ ๋ฐ” ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ ˆ๊ฐ€์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” CLR์„ ์ง€์›ํ•˜๋„๋ก ๋ฐ”๊ฟจ์ง€๋งŒ ์•„์ง ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์†๋Œ€์ง€ ๋ชปํ•œ ์ƒํ™ฉ์ด๋‹ค. ์ด์ œ <https://imaso.googlecode.com/svn/trunk/200902-TimeLib> ๋ฅผ ๋‚ด๋ ค ๋ฐ›์ž. ์—ฌ๊ธฐ์—” UnitTest++๊ณผ TimeLibTest๊ฐ€ ์žˆ๋‹ค. ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์•„๊นŒ ๋ฐ›์€ 200903-TimeLib์— ๋„ฃ์œผ๋ฉด ์ค€๋น„๋Š” ๋๋‚œ ์…ˆ์ด๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” TimeLib์„ ์ฐธ์กฐํ•˜๋Š” TimeLibTest ํ”„๋กœ์ ํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋นŒ๋“œ๋˜๊ณ  ์ž‘๋™ํ•˜๋„๋ก ๊ณ ์น˜๋Š” ์—ฌ์ •์„ ๋– ๋‚œ๋‹ค. ### ์—ฌ์ •์˜ ์‹œ์ž‘ ์šฐ์„  TimeLib ์†”๋ฃจ์…˜ ํŒŒ์ผ(TimeLib.sln)์„ ์—ฐ๋‹ค. ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์˜ ์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ์—” LogManagedTest์™€ TimeLib๋งŒ ์žˆ๋‹ค. ์—ฌ๊ธฐ์— UnitTest++๊ณผ TimeLibTest ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž. ์ด์ œ \[ํ”„๋กœ์ ํŠธ โ€“ ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ\] ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ \[๊ทธ๋ฆผ 1\]์ฒ˜๋Ÿผ ์„ค์ •ํ•œ๋‹ค. TimeLibTest ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ ๋ฅด๊ณ  ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ TimeLib๊ณผ UnitTest++์— ์ข…์†์ ์ด๋ž€ ๊ฑธ ๋ช…์‹œํ•œ๋‹ค. ์ด์ œ TimeLibTest์˜ ์†์„ฑ ํŽ˜์ด์ง€๋กœ ๊ฐ„๋‹ค. \[C/C++ โ€“ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ\]์— "..\\TimeLib" ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋กœ์จ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” "..\\UnitTest++\\src"; "..\\TimeLib" ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆผ 1. ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ [![๊ทธ๋ฆผ 1. ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ](https://andromedarabbit.net/wp-content/uploads/2020/02/4276803540_da24710fdc_o.png)](http://www.flickr.com/photos/kaistizen/4276803540/ "๊ทธ๋ฆผ 1. ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ by CHOI, Jae-Hoon, on Flickr") ๊ผญ ํ•„์š”ํ•œ ์ ˆ์ฐจ๋Š” ์•„๋‹ˆ์ง€๋งŒ \[TimeLib ์†์„ฑ ํŽ˜์ด์ง€ โ€“ C/C++ โ€“ ์ „์ฒ˜๋ฆฌ๊ธฐ โ€“ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ •์˜\]์—์„œ \_LIB ์„ ๋นผ๋ฉด ๋” ์ข‹๋‹ค. ๋ชจ๋“  ๊ฒŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ๋Œ๋˜ 2์›”, 3์›” ๋ฌด๋ ต์œผ๋กœ ๋Œ์•„๊ฐ”๋‹ค. ๋‹จ์ง€ ๊ด€๋ฆฌ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ TimeLib์— ์ถ”๊ฐ€๋๋‹ค๋Š” ์ ๋งŒ ๋‹ค๋ฅด๋‹ค. ์ด์ œ \[๋นŒ๋“œ โ€“ ์ผ๊ด„ ๋นŒ๋“œ\] ๋ฉ”๋‰ด๋กœ ๊ฐ€ Win32 ํ”Œ๋žซํผ์— ์†ํ•˜๋Š” ๋ชจ๋“  ๋นŒ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  โ€˜๋‹ค์‹œ ๋นŒ๋“œโ€™๋ฅผ ํ•ด๋ณด์ž. ์–ด๋–ค๊ฐ€? ํ˜น์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๊ฐ€? ๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งํฌ ์˜ค๋ฅ˜๋งŒ ๋ฐœ์ƒํ•˜๋ฉด ์ œ๋Œ€๋กœ ๋œ ๊ฒƒ์ด๋‹ค. ``` LINK : fatal error LNK1181: '..\debug\timelib.lib' ์ž…๋ ฅ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ``` ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ์—†์ด ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋‹ค๋ฉด ์ด์ œ ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค. ๋งํฌ ์˜ค๋ฅ˜๋งŒ ํ•ด๊ฒฐํ•˜๋ฉด(์‰ฝ์ง„ ์•Š์ง€๋งŒ), ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋˜ ๋Œ€๋กœ ๋œ๋‹ค. ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด์„œ CLR ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ\! ### ๋ฌธ์ œ ํ•ด๊ฒฐ, ๊ทธ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ์ด์ œ๊ป ๊ฒ€ํ† ํ•œ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํ•œ์ฐธ ๊ณ ๋ฏผํ•œ ์ ์ด ์žˆ๋‹ค. ์‹œ๊ฐ„์€ ๋„‰๋„‰ํ–ˆ์ง€๋งŒ ๋ฉฐ์น  ๋™์•ˆ ์ ์ ˆํ•œ ๋ฐฉ์•ˆ์„ ์ฐพ์ง€ ๋ชปํ•ด ๋งˆ์Œ์ด ํŽธ์น˜ ์•Š์•˜๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ C++/CLI ๊ด€๋ จ ์ฑ…์€ ๋ฏธ๊ตญ์—๋„ ๋ช‡ ๊ถŒ ์•ˆ ๋˜๊ณ , ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•ด๋ณธ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋„ ๋งŽ์ง€ ์•Š์•˜๋‹ค. ์„ค์‚ฌ ๊ทธ๋Ÿฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ๋”๋ผ๋„ ๊ฒฝํ—˜๋‹ด์„ ๊ณต์œ ํ•˜์ง„ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘์— โ€œ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅโ€์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์งง์€ ๊ธ€์„ MSDN ํฌ๋Ÿผ์—์„œ ์ฝ๊ฒŒ ๋๋‹ค. ๋‹น์‹œ๋กœ์„  ํ™•์‹คํ•œ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ๋„ ์‹œ๋„ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋ฐฉ๋„๊ฐ€ ์žˆ์ง€๋„ ์•Š์•˜๊ณ . ๊ทธ๋ฆฌํ•˜์—ฌ ๋ˆ์งˆ๊ธฐ๊ฒŒ ์‚ฝ์งˆ์„ ๊ณ„์† ํ–ˆ๋‹ค. ์ด ๊ธ€์—์„  ๊ทธ ์‚ฝ์งˆ ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ„๋‹ค. ๊ณง๋ฐ”๋กœ ์ •๋‹ต์„ ๋‚ด๊ธฐ๋ณด๋‹จ ์‹ค์ˆ˜๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ์—†๋Š”์ง€ ์—ฌ๋Ÿฌ๋ถ„ ์Šค์Šค๋กœ ํŒ๋‹จํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. ํฌ๋Ÿผ์—์„œ ํžŒํŠธ๋ฅผ ๋“ฃ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋Œ€์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? MSDN์˜ ์„ค๋ช…๋ถ€ํ„ฐ ์ฝ์–ด๋ณด์ž. > ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ lib ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ ์ฆ๋ถ„ ๋งํฌ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .lib ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŽ์ด ์žˆ์œผ๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์ด ์˜ˆ๋กœ ์„ค์ •๋˜๋ฉด ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ์€ ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” .lib์˜ .obj ํŒŒ์ผ์— ๋งํฌํ•˜์—ฌ ์ฆ๋ถ„ ๋งํฌ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ง์ด ๋ณต์žกํ•œ๋ฐ ๊ฒฐ๋ก ์€ ๊ฐ„๋‹จํ•˜๋‹ค. ์›๋ž˜๋Š” TimeLib์˜ obj ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋ชจ์•„์„œ TimeLib.lib์„ ์ƒ์„ฑํ•œ๋‹ค. TimeLibTest๋ฅผ ๋นŒ๋“œํ•  ๋• TimeLib.lib๋ฅผ ์ด์šฉํ•  ๋ฟ TimeLib์˜ obj ํŒŒ์ผ์„ ๋‹ค์‹œ ๋งํฌํ•˜์ง„ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ TimeLibTest์— ์ข…์†์„ฑ ์ž…๋ ฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, TimeLibTest์„ ๋งํฌํ•  ๋•Œ TimeLib์˜ obj ํŒŒ์ผ์„ ๋˜ ๋‹ค์‹œ ๋งํฌํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜‘๊ฐ™์€ ๊ณผ์ •์„ ๋‘ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ์…ˆ์ด๋‹ค. ๊ทธ๋ž˜๋„ ์–ด์ฉŒ๊ฒ ๋Š”๊ฐ€? ๋‹น์‹œ๋กœ์„ , ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ๋„ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชป ํ–ˆ๋‹ค. ์ด์ œ \[TimeLibTest ์†์„ฑ ํŽ˜์ด์ง€ โ€“ ๋ง์ปค โ€“ ์ผ๋ฐ˜ โ€“ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ ์‚ฌ์šฉ\]์„ โ€œ์˜ˆโ€๋กœ ๋ฐ”๊พผ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด \[๋ชฉ๋ก 1์ด๋˜ ๋ช…๋ น์ค„์ด \[๋ชฉ๋ก 2\]์ฒ˜๋Ÿผ ๋ฐ”๋€๋‹ค. ๋ชฉ๋ก 1. TimeLibTest์˜ ๋งํฌ์‹œ ๋ช…๋ น์ค„ ``` /OUT:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TimeLibTest.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "..\debug\unittest++.lib" "..\debug\timelib.lib" ``` ๋ชฉ๋ก 2. ๋ฐ”๋€ ๋ช…๋ น์ค„ ``` /OUT:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TimeLibTest.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"X:\imaso\200905-TimeLib\Debug\TimeLibTest.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "..\unittest++\obj\unittest++\debug\timehelpers.obj" ์ค‘๋žตโ€ฆโ€ฆ "..\unittest++\obj\unittest++\debug\xmltestreporter.obj" "..\debug\timelib.lib" ``` ์ด์ œ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ํ•ด๋ณด๋ฉด ์งœ์ž”~ ``` LINK : fatal error LNK1181: '..\debug\timelib.lib' ์ž…๋ ฅ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ``` ์ด๋Ÿฐ! ์—ฌ์ „ํ•˜๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. C++ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‹ค๋ฅธ C++ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ๋ฅผ ์‹œ๋„ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ DLL๋กœ ๋ฐ”๊พผ TestLib ํ”„๋กœ์ ํŠธ์—์„œ timelib.lib ํŒŒ์ผ์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์‹ค์ œ๋กœ \[๋ชฉ๋ก 2\]์—๋Š” ์ด์ƒํ•œ ์ ์ด ์žˆ๋‹ค. TimeLibTest๋Š” ๋ถ„๋ช… TimeLib๊ณผ UnitTest++์„ ๋ชจ๋‘ ์ฐธ์กฐํ•˜๋Š”๋ฐ, \[๋ชฉ๋ก 2\]์—์„  UnitTest++์˜ obj ํŒŒ์ผ๋งŒ ๋ณด์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งจ ๋์— โ€œ..\\debug\\timelib.libโ€์ด๋ž€ ๋Œ€๋ชฉ์ด ์žˆ๋‹ค. ์ด๋Ÿฐ ํ˜„์ƒ์„ ๋ง‰๋Š” ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ์„ ์—†์• ๋Š” ๊ฒƒ์ด๋‹ค. ์ข…์†์„ฑ์„ ์—†์• ๋ฉด TimeLibTest๊ฐ€ TimeLib๋ณด๋‹ค ๋จผ์ € ๋นŒ๋“œ๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์ง€๋งŒ ์ด๋Ÿฐ ์ผ์€ ๋ง‰๊ธฐ ์‰ฝ๋‹ค. \[ํ”„๋กœ์ ํŠธ โ€“ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์ˆœ์„œ\]์—์„œ ์กฐ์ • ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ข…์†์„ฑ์„ ์—†์•ค๋‹ค๊ณ  ํ•ด์„œ TimeLib์˜ obj ํŒŒ์ผ์„ ๊ณง๋ฐ”๋กœ ๋งํฌํ•  ๋ฆฌ๋Š” ์—†๋‹ค. ์ข…์†์„ฑ์ด ์—†์œผ๋‹ˆ ๋‘ ํ”„๋กœ์ ํŠธ์˜ ๊ด€๊ณ„๋ฅผ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์•Œ ๋ฆฌ ์—†๋‹ค. ๊ทธ๋ž˜์„œ \[TimeLibTest ์†์„ฑ ํŽ˜์ด์ง€ โ€“ ๋ง์ปค โ€“ ์ž…๋ ฅ โ€“ ์ถ”๊ฐ€ ์ข…์†์„ฑ\]์— โ€œTimeLib\\\$(ConfigurationName)\\\*.objโ€๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ˆ˜๋™์œผ๋กœ obj ํŒŒ์ผ์„ ๊ฐ€์ ธ๋‹ค ๋งํฌํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค. ์‹ค์ œ๋กœ ์ด์ฏค์—์„œ TimeLibTest๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋Œ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ์ž‘๋™ํ•œ๋‹ค. ``` Success: 6 tests passed. Test time: 0.04 seconds. ๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . . ``` **์ฐธ๊ณ **. ์ด ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์žฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ [๋ฆฌ๋น„์ „ 18](https://github.com/andromedarabbit/imaso/source/detail?r=18)์„ ๋‚ด๋ ค ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ### ๋” ๋‚˜์€ ์‹œ๋„ ์ฒ˜์Œ์—” ์œ„์˜ ๋ฐฉ๋ฒ•์— ๋งŒ์กฑํ–ˆ๋‹ค. ๋งํฌ๋ฅผ ํ•œ๋ฒˆ ๋” ํ•˜๋‹ˆ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋А๋ ค์ง€๊ธด ํ–ˆ์ง€๋งŒ ๋ ˆ๊ฐ€์‹œ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๋œฏ์–ด๊ณ ์น˜๋Š” ๊ฒƒ๋ณด๋‹จ ๋‚ซ์ง€ ์•Š์€๊ฐ€? ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์œผ๋‹ˆ, ํŠน์ • ๋นŒ๋“œ์‹œ ๋ฏธ๋ฌ˜ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•œ ์ƒ˜ํ”Œ๋กœ๋Š” ์žฌํ˜„ํ•˜๊ธฐ ํž˜๋“ค๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›์ธ์€ ๋ถ„๋ช…ํ•œ๋ฐ โ€œTimeLib\\\$(ConfigurationName)\\\*.objโ€์ด ๊ณจ์น˜๊ฑฐ๋ฆฌ์˜€๋‹ค. ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” Obj ํŒŒ์ผ์„ ๋ชจ๋‘ ๋งํฌ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. TimeLib\\Debug\\ ํด๋”์— TimeLib์˜ obj ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ, TimeLib์ด ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ(๊ทธ๋Ÿด ์ •๋„๋กœ ๋ณต์žกํ•œ ๊ตฌ์„ฑ์ด๋ผ๋ฉด)์˜ obj ํŒŒ์ผ์ด ๋“ค์–ด ์žˆ์–ด์„œ ๋งํฌ๊ฐ€ ๊ผฌ์ธ ๊ฒƒ์ด๋‹ค. \[๋ชฉ๋ก 2\]์—์„œ์ฒ˜๋Ÿผ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์•Œ์•„์„œ ํ•„์š”ํ•œ obj ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ์ด๋Ÿฐ ์ผ์ด ์—†๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋ก  ์š”์›ํ•œ ์ผ์ด๋‹ค. ๊ทธ๋Ÿฐ ๊นŒ๋‹ญ์— ๋นŒ๋“œ ์ข…์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ถ”๊ฐ€ ์ข…์†์„ฑ์— โ€œTimeLib\\\$(ConfigurationName)\\\*.objโ€๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์ด ์—†๋Š”๊ฐ€ ๊ณ ๋ฏผํ•œ ๊ฒƒ์ด๋‹ค. ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ ๋ฐฉ๋ฒ•์€ ์žˆ์—ˆ๋‹ค. ์˜์™ธ๋กœ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‹ค๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์—ฌํƒœ๊นŒ์ง€ ์‚ดํŽด๋ณธ ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ์•ฝ๊ฐ„ ๋’ค์ง‘๊ธด ํ•ด์•ผ ํ•œ๋‹ค. ๋” ์ž์„ธํžˆ ๋“ค์—ฌ๋‹ค ๋ณด๊ธฐ ์ „์— /clr ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ๋‹ค์‹œ ๊ฒ€ํ† ํ•ด๋ณด์ž. C++/CLI ํ”„๋กœ์ ํŠธ๋ฅผ /clr ์ปดํŒŒ์ผํ•  ๋•Œ ์„ ํƒํ• ๋งŒํ•œ ์ „๋žต์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€์ด๋‹ค. - ํ”„๋กœ์ ํŠธ ์ „์ฒด์— /clr ์˜ต์…˜์„ ์ฃผ๊ณ , ๋ชจ๋“  cpp ํŒŒ์ผ์„ /clr ์ปดํŒŒ์ผํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ CLR ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์“ฐ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค. ์ˆœ์ˆ˜ํ•œ CLR ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ์“ธ๋งŒํ•œ ์ „๋žต์ด์ง€๋งŒ, ๋„ค์ดํ‹ฐ๋ธŒ C++ ๊ธฐ๋Šฅ๋งŒ ์“ฐ๋Š” ์ฝ”๋“œ ํŒŒ์ผ๊นŒ์ง€ /clr ์ปดํŒŒ์ผ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ์ƒ์˜ ํ•˜๋ฝ์€ ํ•„์—ฐ์ ์ด๋‹ค. ์ถ”์ฒœํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. - Expert C++/CLI๋ž€ ์ฑ…์—์„œ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด๋ ‡๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด ์„ค์ •์—์„  /clr์„ ๋บ€๋‹ค. CLR ๊ธฐ๋Šฅ์„ ์“ฐ๋Š” ์ฝ”๋“œ ํŒŒ์ผ๋งŒ ๋”ฐ๋กœ ์˜ต์…˜์„ ์ค€๋‹ค. - ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ์ •๋ฐ˜๋Œ€๋กœ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด ์„ค์ •์— /clr ์˜ต์…˜์„ ์ฃผ๊ณ , ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ํŒŒ์ผ์—๋งŒ /clr ์˜ต์…˜์„ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ์ด ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœ์ ํŠธ๋ฅผ CLR ํ”„๋กœ์ ํŠธ๋กœ ํ™•์žฅํ•  ๋• ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์„ ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌํƒœ๊นŒ์ง€ Expert C++/CLI๋ž€ ์ฑ…์ด ์ œ์‹œํ•œ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ž๋‹ค. ์‚ฌ์‹ค ์ด ๋ฐฉ๋ฒ•์ด ์ข‹๊ธด ํ•˜๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ์†Œ์Šค ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ์˜ต์…˜์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ด€๋ฆฌ๋˜๋Š” ์†Œ์Šค ํŒŒ์ผ๋งŒ ์†๋ณธ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ ๋‹ค. ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ๊ธฐ๋Šฅ ํ™•์žฅ์ด๋ผ ์ด์ƒ์ ์ด์ง€ ์•Š์€๊ฐ€? ์•ˆํƒ€๊นŒ์šด ์ผ์ด์ง€๋งŒ dllexport๊ฐ€ ์•„๋‹Œ obj ํŒŒ์ผ ๋งํฌ๋ฅผ ํ•  ๋• ์„ธ ๋ฒˆ์งธ ๋ฐฉ์‹์ด ๋” ๋‚ซ๋‹ค. TimeLib ํ”„๋กœ์ ํŠธ ์„ค์ •์— /clr ์˜ต์…˜์„ ์ฃผ์–ด์•ผ ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” TimeLibTest๊ฐ€ TimeLib์ด ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก  ๊ทธ ๋งŽ์€ ๊ธฐ์กด ์†Œ์Šค ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์†Œ์Šค ํŒŒ์ผ์„ ๋“œ๋ž˜๊ทธ ๋“ฑ์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ์„ ํƒํ•ด ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๋‹จ๋ฒˆ์— ๋ฐ”๊พธ๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€ TimeLib ํ”„๋กœ์ ํŠธ์— /clr์„ ์ ์šฉํ•˜๊ณ , ์ปดํŒŒ์ผ ์˜ต์…˜์„ ์ ์ ˆํžˆ ๊ณ ์น˜๋Š” ๊ฒƒ์ด๋‹ค. ์ปดํŒŒ์ผ ์˜ต์…˜์€ 2์›” ์นผ๋Ÿผ์— ๋”ฐ๋ผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ์—” ์ง€๋ฉด์ด ๋ชจ์ž๋ผ๋‹ˆ ์ง€๋‚œ ์นผ๋Ÿผ์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋งˆ์ณค์œผ๋ฉด ์ผ๋‹จ๋ฝ๋๋‹ค. ๋ฐ”๋กœ ๋นŒ๋“œํ•ด์„œ ๋Œ๋ ค๋ณด๋ฉด ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 6๊ฐœ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•œ๋‹ค. ``` Success: 6 tests passed. Test time: 0.04 seconds. ๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . . ``` **์ฐธ๊ณ **. ์ด ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์žฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ [๋ฆฌ๋น„์ „ 19](https://github.com/andromedarabbit/imaso/source/detail?r=19)์„ ๋‚ด๋ ค ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ### ๋‹น๋ถ€์˜ ๋ง 100% ํ™•์‹ ํ•˜์ง„ ๋ชปํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ ๋ฐ ๋งํฌ ์˜ต์…˜์„ ๊นŠ์ˆ™ํ•˜๊ฒŒ ํŒŒ๊ณ ๋“œ๋Š” ์ž๋ฃŒ๋Š” ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ, ์‚ฌ๋žŒ๋“ค์€ ์ด์ƒํ•˜๊ฒŒ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํŠน์ง•์—๋Š” ๊ด€์‹ฌ์„ ๋‘์ง€๋งŒ ์˜์™ธ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—” ์†Œํ™€ํ•œ ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ์‚ฌ์‹ค ํ•™๊ต ์ˆ™์ œ๋‚˜ ์†Œ๊ทœ๋ชจ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„  ๋นŒ๋“œ ๊ตฌ์„ฑ์ด ๊ทธ๋ฆฌ ์ค‘์š”ํ•˜์ง„ ์•Š๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋งŽ์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์งง๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. C++์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅธ C\# ๋“ฑ์„ ๋‹ค๋ฃฐ ๋•Œ๋„ ์ปดํŒŒ์ผ ์˜ต์…˜์— ์ฃผ์˜๋ฅผ ๋œ ๊ธฐ์šธ์ธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๊ทœ๋ชจ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์šด์šฉํ•ด๋ณด๋‹ˆ ์ ์ ˆํ•œ ๋นŒ๋“œ ๊ตฌ์„ฑ์ด ์–ผ๋งˆ๋‚˜ ํฐ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค. ์šฐ์„  ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ๋ฉด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ง€์—ฐ๋œ๋‹ค. ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ๊ณ ์ณค์„ ๋ฟ์ธ๋ฐ 5๋ถ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ํŒ€๊ณผ ๋˜‘ ๊ฐ™์€ ์‹œ๊ฐ„์— ํ”„๋กœ์ ํŠธ ๋Œ€ ์—ฌ์„ฏ ๊ฐœ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์ด ๊ฐ™์€ ์ˆœ ์—†๋‹ค. ๋‹จ์ˆœํžˆ ์‹œ๊ฐ„์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ „์ž์™€ ๊ฐ™์€ ํŒ€ ํ™˜๊ฒฝ์—์„  ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธˆ์„ธ ์ง€์น˜๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ํ•‘๊ณ„ ์‚ผ์•„ ๋‹ค๋ฅธ ์ผ์— ์—ด์ค‘ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๋นŒ๋“œ ์‹œ๊ฐ„๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๋นŒ๋“œ๋ฅผ ์ ์ ˆํžˆ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฒ„๊ทธ๋ฅผ ์กฐ๊ธฐ์— ์žก์„ ์ˆ˜๋„ ์žˆ๋‹ค. โ€˜๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌโ€™๋‚˜ โ€˜์ž‘์€ ํ˜•์‹ ๊ฒ€์‚ฌโ€™ ๊ฐ™์€ ์˜ต์…˜์ด ๊ทธ๋Ÿฐ ์˜ˆ์— ์†ํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ด๋Ÿฐ ์˜ต์…˜์„ ์ ์šฉํ•˜๊ณ  ํ•œ๋™์•ˆ ๋ฒ„๊ทธ๋ฅผ ์ƒ๋‹นํžˆ ์žก์•„๋ƒˆ๋‹ค. ์ƒ์‚ฐ์„ฑ์„ ์ •๋ง ๋†’์ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ตœ์†Œํ•œ ํŒ€ ๊ตฌ์„ฑ์› ์ค‘ ํ•œ ๋ช…์€ ์ง€์†์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์„ ๊ฒ€ํ† ํ•˜๊ณ  ์ตœ์ ํ™”ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ, ์ด๋Ÿฐ ์—…๋ฌด๋Š” ์ง€๋ฃจํ•˜๊ณ  ์‚ฌ๋žŒ์„ ์ง€์น˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ๋ณด์ƒ์ด ๋”ฐ๋ผ์•ผ ์ข‹๋‹ค. ๋ณด๋„ˆ์Šค๋กœ ๋ฉ‹์ง„ ๋…ธํŠธ๋ถ์„ ์‚ฌ์ค„ ํ•„์š”์•ผ ์—†๊ฒ ์ง€๋งŒ ๊ฐ€๋” ๋–ก๋ณถ์ด๋ผ๋„ ์‚ฌ์ฃผ๋ฉด ์ข‹์ง€ ์•Š์„๊นŒ? ์•„๋‹ˆ๋ฉด ์ด ์—…๋ฌด๋ฅผ ํŒ€ ๊ตฌ์„ฑ์›์ด ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉด ๋งก์•„๋„ ์ข‹๊ฒ ๋‹ค.
Shard103 (laksa)
Root Hash17513082179374524103
Unparsed URLnet,andromedarabbit!/2009/05/16/cplusplus_cli_lecture_2009_05/ s443