C#에서 플랫폼 호출 서비스를 이용하면 Manged Code로 작성되지 않은 DLL들을 이용할 수 있다. 이와 같이 PInvoke 서비스를 이용하기 위해서는 다음가 같은 절차대로 코드를 추가한다.
1. using 지시문을 이용하여 다음과 같이 네임스페이스를 선언
using System.Runtime.InteropServices;
2. class 내에 다음과 같은 형식으로 호출하고자 하는 함수의 원형을 선언한다.
[DllImport("dll경로")]
public static extern Return_Type function(Parameter)
---------------------------------------------------------------------------------
※ 실제 위와 같은 형식으로 WinAPI 프로그램을 할때 하던 방식으로 메시지 처리를 하는 것이 가능하다.
using System.Runtime.InteropServices;
class DLLInvokeTest
{
private const uint LBUTTONDOWN = 0x00000002; // WM_LBUTTONDOWN
private const uint LBUTTONUP = 0x00000004; // WM_LBUTTONUP
[DllImport("user32.dll")]
public static extern int MessageBoxA(int h, string m, string c, int type);
[DllImport("user32.dll")]
static extern void mouse_event( uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo );
[DllImport("user32.dll")]
static extern int SetCursorPos(int x,int y);
public static int Main()
{
// 메시지박스 호출
MessageBoxA(null, "Hello World!", "My Message Box", 0);
// 마우스 이벤트 발생
mouse_event( LBUTTONDOWN, 0, 0, 0, 0 );
mouse_event( LBUTTONUP, 0, 0, 0, 0 );
return ;
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// m.Msg로 전달되는 메시지를 이곳에서 처리함
}
1. using 지시문을 이용하여 다음과 같이 네임스페이스를 선언
using System.Runtime.InteropServices;
2. class 내에 다음과 같은 형식으로 호출하고자 하는 함수의 원형을 선언한다.
[DllImport("dll경로")]
public static extern Return_Type function(Parameter)
---------------------------------------------------------------------------------
※ 실제 위와 같은 형식으로 WinAPI 프로그램을 할때 하던 방식으로 메시지 처리를 하는 것이 가능하다.
using System.Runtime.InteropServices;
class DLLInvokeTest
{
private const uint LBUTTONDOWN = 0x00000002; // WM_LBUTTONDOWN
private const uint LBUTTONUP = 0x00000004; // WM_LBUTTONUP
[DllImport("user32.dll")]
public static extern int MessageBoxA(int h, string m, string c, int type);
[DllImport("user32.dll")]
static extern void mouse_event( uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo );
[DllImport("user32.dll")]
static extern int SetCursorPos(int x,int y);
public static int Main()
{
// 메시지박스 호출
MessageBoxA(null, "Hello World!", "My Message Box", 0);
// 마우스 이벤트 발생
mouse_event( LBUTTONDOWN, 0, 0, 0, 0 );
mouse_event( LBUTTONUP, 0, 0, 0, 0 );
return ;
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// m.Msg로 전달되는 메시지를 이곳에서 처리함
}
}
※ 참고사항
- dllimport 관련 파라미터에 정보 사이트: http://www.pinvoke.net
'IT정보 > Language(C++, ..)' 카테고리의 다른 글
[C++] C++ 특징과 장점 (0) | 2010.01.24 |
---|---|
[C#] 문자열을 UTF-8로 인코딩하기 (0) | 2010.01.12 |
[C#] 레지스트리(Registry)값 읽고 쓰기 (0) | 2009.12.18 |
[C#] 현재 실행파일 경로 구하기 (0) | 2009.12.18 |
[C#] 파일 및 폴더 복사, 삭제 및 이동 예제 (0) | 2009.12.18 |