โน๏ธ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 0 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://andromedarabbit.net/2009/05/16/cplusplus_cli_lecture_2009_05/ |
| Last Crawled | 2026-04-08 17:07:57 (4 hours ago) |
| First Indexed | 2023-08-24 01:42:52 (2 years ago) |
| HTTP Status Code | 200 |
| Meta Title | C++/CLI ๊ฐ์ข: ํ๋ก์ ํธ ๊ตฌ์ฑ ๋ฐ๊พธ๊ธฐ โ ์๋๋ก๋ฉ๋ค ํ ๋ผ |
| Meta Description | null |
| Meta Canonical | null |
| 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. ํ๋ก์ ํธ ์ข
์์ฑ
[](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://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. ํ๋ก์ ํธ ์ข
์์ฑ
[](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๋ถ์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ํ๊ณผ ๋ ๊ฐ์ ์๊ฐ์ ํ๋ก์ ํธ ๋ ์ฌ์ฏ ๊ฐ๋ฅผ ๋น๋ํ๋ ํ์ ์์ฐ์ฑ์ด ๊ฐ์ ์ ์๋ค. ๋จ์ํ ์๊ฐ์ ๋ฌธ์ ๊ฐ ์๋๋ค. ์ ์์ ๊ฐ์ ํ ํ๊ฒฝ์์ ๊ฐ๋ฐ์๋ค์ด ๊ธ์ธ ์ง์น๊ณ ์ปดํ์ผ ์๊ฐ์ ํ๊ณ ์ผ์ ๋ค๋ฅธ ์ผ์ ์ด์คํ ๋๊ฐ ๋ง๋ค.
๋น๋ ์๊ฐ๋ ์ค์ํ์ง๋ง ๋น๋๋ฅผ ์ ์ ํ ๊ตฌ์ฑํ๋ฉด ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ์ก์ ์๋ ์๋ค. โ๊ธฐ๋ณธ ๋ฐํ์ ๊ฒ์ฌโ๋ โ์์ ํ์ ๊ฒ์ฌโ ๊ฐ์ ์ต์
์ด ๊ทธ๋ฐ ์์ ์ํ๋ค. ์ค์ ๋ก ์ด๋ฐ ์ต์
์ ์ ์ฉํ๊ณ ํ๋์ ๋ฒ๊ทธ๋ฅผ ์๋นํ ์ก์๋๋ค.
์์ฐ์ฑ์ ์ ๋ง ๋์ด๊ณ ์ถ๋ค๋ฉด ์ต์ํ ํ ๊ตฌ์ฑ์ ์ค ํ ๋ช
์ ์ง์์ ์ผ๋ก ํ๋ก์ ํธ ๊ตฌ์ฑ์ ๊ฒํ ํ๊ณ ์ต์ ํํด์ผ ํ ๊ฒ์ด๋ค. ๋ค๋ง, ์ด๋ฐ ์
๋ฌด๋ ์ง๋ฃจํ๊ณ ์ฌ๋์ ์ง์น๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ ์ ํ ๋ณด์์ด ๋ฐ๋ผ์ผ ์ข๋ค. ๋ณด๋์ค๋ก ๋ฉ์ง ๋
ธํธ๋ถ์ ์ฌ์ค ํ์์ผ ์๊ฒ ์ง๋ง ๊ฐ๋ ๋ก๋ณถ์ด๋ผ๋ ์ฌ์ฃผ๋ฉด ์ข์ง ์์๊น? ์๋๋ฉด ์ด ์
๋ฌด๋ฅผ ํ ๊ตฌ์ฑ์์ด ๋ฒ๊ฐ์ ๊ฐ๋ฉด ๋งก์๋ ์ข๊ฒ ๋ค. |
| Shard | 103 (laksa) |
| Root Hash | 17513082179374524103 |
| Unparsed URL | net,andromedarabbit!/2009/05/16/cplusplus_cli_lecture_2009_05/ s443 |