[.Net] C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
์๊ฐ
๋ณธ๋ฌธ์ ์ฝ๊ธฐ ์ ์ C++/CLI๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๋ฉด ์์ ์ฝ๋๋ฅผ ๋ฐ๋ผ ํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
C++/CLI ์์ ๋ง๋ค๊ธฐ
๊ฐ๋จํ๊ฒ C++/CLI ํ๋ก์ ํธ์์ ๋ง์ , ๋บ์ , ๊ณฑ์ , ๋๋์ ํจ์๋ฅผ ๋ง๋ค์ด C#์์ ์ฌ์ฉํ๋ ์์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์ค์ต์ Visual Studio 2017๋ก ์งํํ๊ฒ ์ต๋๋ค. ์์ ํ์ผ ๊ฒฐ๊ณผ ๋ฐ ์์ค ์ฝ๋๋ ๋ณธ๋ฌธ ํ๋จ์ ์์ต๋๋ค.
๋จผ์ , Visual Studio ๊ตฌ์ฑ์ผ๋ก C++/CLI๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋๋ฐ์. ์ค์น๊ฐ ์๋์ด ์๋ ๊ฒฝ์ฐ ์๋ ์ฌ์ง์ฒ๋ผ ์ค์น ๊ตฌ์ฑ์์ 'C++/CLI ์ง์'์ ํด๋ฆญํ๊ณ ์ค์นํ์ธ์. ์ค์น ํ์ผ ๋๋ 'ํ๋ก๊ทธ๋จ ๋ฐ ๊ธฐ๋ฅ'์ Visual Studio 2017 ์ ํ ํ '๋ณ๊ฒฝ'์ ๋๋ฅด๋ฉด ์๋ ํ๋ฉด์ด ํ์๋ฉ๋๋ค. ์ ํ ํ ๊ตฌ์ฑ ํ์ผ์ ์ค์นํฉ๋๋ค.
์ค๋น๊ฐ ๋๋ฉด 'CLR ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ'๋ฅผ ์ ํํ๊ณ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
ํ๋ก์ ํธ ์ด๋ฆ์ 'Wrapper'๋ก ์์ฑํ์ต๋๋ค. ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋ฉด Wrapper.h ๋ฐ cppํ์ผ์ด ๋ณด์ด๊ณ , ํค๋ ํ์ผ์ ์ด์ด ๋ณด๋ฉด C# ๋ฌธ๋ฒ์ด ๋ณด์ ๋๋ค. C#์ ํค๋ ํ์ผ๊ณผ ์์ค ํ์ผ์ด ์๋๋ฐ, ๋ง์น C++์ C#์ด ๋ค์์ธ ๋๋์ ๋๋ค.
์ด์ Wrapper class์ ์ฌ์น ์ฐ์ฐ์ ์ํ ํจ์๋ค์ ํค๋์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค. ํด๋์ค ๋ช ์ MyArithmetic ์ผ๋ก ์ ์ํ์ต๋๋ค.
#pragma once
using namespace System;
namespace Wrapper {
public ref class MyArithmetic
{
public:
int Add(int a, int b);
int Subtract(int a, int b);
float Multiply(float a, float b);
float Divide(float a, float b);
};
}
์์ค ํ์ผ์๋ ์๋์ฒ๋ผ ๊ตฌํํฉ๋๋ค. ๋๋ฌด ๊ฐ๋จํด์ ๋ฐ๋ก ์ค๋ช ํ ํ์๋ ์๊ฒ ์ฃ ?
#include "stdafx.h"
#include "Wrapper.h"
namespace Wrapper
{
int MyArithmetic::Add(int a, int b)
{
return a + b;
}
int MyArithmetic::Subtract(int a, int b)
{
return a - b;
}
float MyArithmetic::Multiply(float a, float b)
{
return a * b;
}
float MyArithmetic::Divide(float a, float b)
{
return a / b;
}
}
์ด๋ ๊ฒ ์์ฑํ ํ ๋น๋ํ๋ฉด ์ถ๋ ฅ ๊ฒฝ๋ก์ dll ํ์ผ์ด ์์ฑ๋ฉ๋๋ค. ์์ฑ๋ dll์ ์ดํ C# ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด์ ์๋ฃจ์ ์ C# ํ๋ก์ ํธ๋ฅผ ํ๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์๋์ฒ๋ผ '์ ํ๋ก์ ํธ' ๋ฉ๋ด๋ฅผ ์ ํํฉ๋๋ค.
์๋ ๊ทธ๋ฆผ์ฒ๋ผ 'Windows Forms ์ฑ'์ ์ ํํ๊ณ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
ํ๋ก์ ํธ ์์ฑ์ด ์๋ฃ๋๋ฉด ์๋ฃจ์ ํ์๊ธฐ์ ๋ ๊ฐ์ ํ๋ก์ ํธ๊ฐ ๋ณด์ ๋๋ค. C# ํ๋ก์ ํธ์ '์ฐธ์กฐ'์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ํด๋ฆญํ๊ณ '์ฐธ์กฐ ์ถ๊ฐ'๋ฅผ ์ ํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Wrapper ํ๋ก์ ํธ์ ์ถ๋ ฅ ๊ฒฝ๋ก์์ 'Wrapper.dll'์ ์ฒดํฌํ๊ณ ์ถ๊ฐํฉ๋๋ค.
์ ์์ ์ผ๋ก ์ถ๊ฐ๋๋ฉด ์๋์ฒ๋ผ '์ฐธ์กฐ'์ 'Wrapper' ํญ๋ชฉ์ด ๋ณด์ ๋๋ค.
์ด์ C# ํ๋ก์ ํธ์์ MyArithmetic Class๋ฅผ ์ ์ํ์ฌ ์ฌ์น์ฐ์ฐ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ C# ํ๋ก๊ทธ๋จ์ UI๋ ์๋์ฒ๋ผ ๊ตฌ์ฑํ์ต๋๋ค.
์ฝ๋์์๋ using Wrapper; ๋ฅผ ์ถ๊ฐํ๊ณ MyArithmetic ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ฒํผ์ ์ด๋ฒคํธ์์๋ ์ฌ์น์ฐ์ฐ ํจ์๋ค์ ํธ์ถํ๋ฉด ๋ฉ๋๋ค.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Wrapper; //namespace ์ถ๊ฐ
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
MyArithmetic arithmetic = new MyArithmetic(); //๊ฐ์ฒด ์์ฑ
public Form1()
{
InitializeComponent();
}
private void buttonAdd_Click(object sender, EventArgs e)
{
int value = arithmetic.Add(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
textBoxResult.Text = value.ToString();
}
private void buttonSubtract_Click(object sender, EventArgs e)
{
int value = arithmetic.Subtract(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
textBoxResult.Text = value.ToString();
}
private void buttonMultiply_Click(object sender, EventArgs e)
{
float value = arithmetic.Multiply((float)Convert.ToDouble(textBox1.Text), (float)Convert.ToDouble(textBox2.Text));
textBoxResult.Text = value.ToString();
}
private void buttonDivde_Click(object sender, EventArgs e)
{
float value = arithmetic.Divide((float)Convert.ToDouble(textBox1.Text), (float)Convert.ToDouble(textBox2.Text));
textBoxResult.Text = value.ToString();
}
}
}
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ต๋๋ค. ์ ๋์ํ์ฃ ?
๋ง์ง๋ง์ผ๋ก dotPeek๋ก ์์ฑ๋ exeํ์ผ์ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค. MyArithmetic ๊ฐ์ฒด๋ก ์ฌ์น์ฐ์ฐ ํจ์๋ฅผ ํธ์ถํ ๊ฒ์ด ๋ณด์ด์ง๋ง, ๋ด๋ถ ์ฐ์ฐ ์ฝ๋๊น์ง๋ ๋ ธ์ถ๋์ง ์์ต๋๋ค. ์ง์ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ C# ํจ์์ ์ง์ ๊ตฌํํ๋ฉด ์ ๋ง ํฐ์ผ ๋๊ฒ ์ฃ ?
์๋ ์ฒจ๋ถ๋ ์์ ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.NET] google ๋ฐ Naver (SMTP) ๋ฉ์ผ ๋ณด๋ด๊ธฐ (์์ ํฌํจ)
[.NET] google ๋ฐ Naver (SMTP) ๋ฉ์ผ ๋ณด๋ด๊ธฐ (์์ ํฌํจ)
2021.01.14 -
[.Net] 3'rd party library๋ฅผ C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
[.Net] 3'rd party library๋ฅผ C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
2020.02.29 -
[.Net] C++/CLI ์ดํดํ๊ธฐ
[.Net] C++/CLI ์ดํดํ๊ธฐ
2020.02.22 -
[.Net] .Net Framework์ ๋์ปดํ์ผ๋ฌ(Decompiler) ILSpy ๋ฐ dotPeek ์์
[.Net] .Net Framework์ ๋์ปดํ์ผ๋ฌ(Decompiler) ILSpy ๋ฐ dotPeek ์์
2020.02.15