먼저 Visual Studio에서 C++ Win32 DLL 프로젝트를 만든다.
그리고 아래 코드를 넣고 빌드한다.

이 코드에서 눈여겨 볼만 한 것은 extern "C"와 __declspec(dllexport)이다.
 
1
2
3
4
extern "C" __declspec(dllexport) void SetEventCallback(void (*fp)())
{
	fp();
}



다음으로 Visual Studio에서 C# Console Application프로젝트를 만든다.

C#에서는 delegate가 함수 포인터를 대신한다.

using System.Runtime.InteropServices;

delegate void EventCallback();

class DllWrapper
{
	[DllImport("test_c_dll.dll")]
	public static extern void SetEventCallback(EventCallback fp);
}

class Program
{
	static void asyncFunction()
	{
		Console.WriteLine("This Function is called in dll made by C");
	}

	static void Main(string[] args)
	{
		EventCallback e1 = new EventCallback(asyncFunction);
		DllWrapper.SetEventCallback(e1);
	}
}



2011/11/04 - [C# .NET] - [C#] PInvoke 1탄. 데이터 타입 변환표
2011/11/04 - [C# .NET] - [C#] PInvoke 2탄. Normal Data Type
2011/11/04 - [C# .NET] - [C#] PInvoke 3탄. String 타입
2011/11/04 - [C# .NET] - [C#] PInvoke 4탄. ByteArray
2011/11/04 - [C# .NET] - [C#] PInvoke 5탄. Callback Function

+ Recent posts