π₯οΈ Coding/C#
C# μμ C++ ν¨μ νΈμΆ
SpaceJ
2021. 7. 26. 16:41
λ°μν
C#μμ C++ ν¨μλ₯Ό νΈμΆν μ μλλ‘ νλ €λ©΄, __declspec(dllexport) ν€μλλ₯Ό λ°νν μμ μΆκ°ν΄μΌ νλ€. μ¬μ©ν μ μλλ‘ λ³λμ μ μΈμ΄ μΆκ°λμ΄μΌ νλ€.
// Test.dll - Test.cpp
#define DllExport __declspec( dllexport )
DllExport int __stdcall Test(int i)
{
return i + 10;
}
C# μμλ C++ ν¨μλ₯Ό νΈμΆνλ €λ©΄ DllImportAttribute ν΄λμ€λ₯Ό μ¬μ©νμ¬μΌ νλ€. μ΄ λ, C#κ³Ό C++μμ λ°μ΄ν° ννλ°©λ²μ΄ λ€λ₯΄κΈ° λλ¬Έμ μ μ ν λ§μ¬λ§ν΄μ£Όμ΄μΌ νλλ°, μ΄λ₯Ό μν μ½μμ Calling Convention (νΈμΆ κ·μ½) μ΄λΌκ³ νλ€. λ§μ¬λ§μ΄λ, ν κ°μ²΄μ λ©λͺ¨λ¦¬λ₯Ό μ μ₯ λλ μ μ‘μ μ ν©ν ννλ‘ λ³ννλ κ³Όμ μ μλ―Ένλ€.
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
λ°μν