๋ฐ˜์‘ํ˜•

์†Œ๊ฐœ

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ C# ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ์‹œ .Net Decompiler์— ์˜ํ•ด ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์„ฑ์„ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

[.Net] .Net Framework์™€ ๋””์ปดํŒŒ์ผ๋Ÿฌ(Decompiler) ILSpy ๋ฐ dotPeek ์˜ˆ์ œ

 

[.Net] .Net Framework์™€ ๋””์ปดํŒŒ์ผ๋Ÿฌ(Decompiler) ILSpy ๋ฐ dotPeek ์˜ˆ์ œ

๋””์ปดํŒŒ์ผ๋Ÿฌ(Decompiler) ํ˜น์‹œ ๋””์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹ ๊ฐ€์š”? ์ €๋Š” ๋””์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•„๋งˆ๋„ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋””์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์—ญ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ..

luckygg.tistory.com

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Native C++ ์ฝ”๋“œ๋ฅผ C++/CLI๋กœ Wrappingํ•˜์—ฌ C#์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

C++/CLI๋ž€?

ํ”„๋กœ์„ธ์Šค

C++/CLI๋ฅผ ์•Œ๊ธฐ ์ „์— Native code์™€ Managed, Unmanaged code์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €์˜ ์ปจ์…‰์€ "์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€"์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณธ๋ฌธ์—์„œ๋Š” ๊นŠ๊ฒŒ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด C++๋Š” Unmanaged code์ด๋ฉฐ Native code๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  C#์€ Managed code๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด Unmanaged code๋Š” .Net์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— C++ ์ฝ”๋“œ๋Š” Managed code๋กœ ๋ณ€ํ™˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ C++/CLI๋ฅผ ํ†ตํ•ด C++ ์ฝ”๋“œ๋ฅผ C#์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CLI๋Š” Common Language Infrastructure์˜ ์•ฝ์–ด์ด๋ฉฐ, Microsoft๊ฐ€ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ECMA๊ฐ€ ํ‘œ์ค€ ์–ธ์–ด๋กœ ์ œ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, C++์™€ C#์˜ ์ค‘๊ฐ„ ์–ธ์–ด(?)์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค๊ทธ๋Ÿผ Managed์™€ Unmanaged์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”? Managed์˜ ๊ฒฝ์šฐ Garbage Collector์— ์˜ํ•ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋˜์ง€๋งŒ Unmanaged๋Š” ๊ทธ๋ ‡์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค์ฐธ๊ณ ๋กœ ์ด C++/CLI๋Š” Visual studio 2005๋ถ€ํ„ฐ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

https://mobile.developer.com/net/cplus/article.php/2197621/Managed-Unmanaged-Native-What-Kind-of-Code-Is-This.htm

 

Managed, Unmanaged, Native: What Kind of Code Is This?

With the release of Visual Studio .NET, many developers are now willing to consider using the new technology known as managed code. But especially for C++ developers, it can be a bit confusing. That's because C++ is special. With the release of Visual Stud

mobile.developer.com

๊ทธ๋ž˜๋„ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์‹œ๋‚˜์š”? ๊ทธ๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ C++ ์ฝ”๋“œ๋ฅผ C#์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด C++/CLI๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ•˜๋‚˜ ๋”, ๊ทธ๋Ÿผ P/Invoke์™€ C++/CLI์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”? P/Invoke๋ž€ Dllimport๋กœ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ช…์‹œํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ, ์„ฑ๋Šฅ ๋ฉด์—์„œ๋Š” C++/CLI ๋ฐฉ์‹์ด P/Invoke๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. P/Invoke vs C++/CLI์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

https://www.codeproject.com/Articles/253444/PInvoke-Performance

 

PInvoke Performance

Performance comparison of P/Invoke versus a C++/CLI wrapper.

www.codeproject.com

๋˜ํ•œ, C++/CLI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค๋ฅผ ์‰ฝ๊ฒŒ ๋„˜๊ฒจ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋”์šฑ ์‰ฝ์Šต๋‹ˆ๋‹ค. P/Invoke์™€ C++/CLI์˜ ์ฐจ์ด์ ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/a574add1-0adc-4306-a673-39defa5db015/using-c-dll-vs-ccli-wrapper?forum=csharpgeneral

 

Using C++ DLL vs C++/CLI wrapper

1. You'd need to use extern "C" in your DLL. This would expose the DLL as a C export without the name mangling that C++ does. The resulting function would be something like _foo. In your DllImport you'd then need to specify the EntryPoint attribute and set

social.msdn.microsoft.com

์ถ”๊ฐ€๋กœ C++/CLI์— ๋Œ€ํ•œ ์˜ˆ์ œ๋Š” ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

[.Net] C++/CLI๋กœ C#์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ dll ๋งŒ๋“ค๊ธฐ (์˜ˆ์ œ ํฌํ•จ)

[.Net] 3'rd party library๋ฅผ C++/CLI๋กœ C#์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ dll ๋งŒ๋“ค๊ธฐ (์˜ˆ์ œ ํฌํ•จ)

๋ฐ˜์‘ํ˜•