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로 전달되는 메시지를 이곳에서 처리함
      }
}
※ 참고사항
 - dllimport 관련 파라미터에 정보 사이트: http://www.pinvoke.net



+ Recent posts