DllImport Attribute
DllImport Attribute는 기존의 프로그램 언어로 작성된 여러 컴포넌트나 DLL들을 사용할 경우에 표시해 주어야 하는 Attribute입니다. 즉, 특정 메서드가 비관리(Unmanaged) 코드형태로 실행되는지 여부를 나타냅니다.
▣ DllImport Attribute |
q 기존에 만들어진 외부 DLL을 호출하기 위해서 사용하는 Attribute임 |
닷넷 프레임웍을 기반으로 하는 프로그래밍 언어에서 기존 프로그래밍 언어로 작성된 여러 컴포넌트, DLL들을 사용할 경우에 반드시 표시해야 하는 Attribute입니다. DllImport Attribute를 사용하려면 System.Runtime.InteropService을 using해서 사용해야 합니다.
간단한 예를 알아보도록 하겠습니다. 다음은 메시지 대화상자를 표시하는 Win32 API의 MessageBox 함수를 호출하는 코드입니다.
& |
DllImoprt.cs |
Ü DllImport Attribute를 테스트하는 예제 |
using System; | ||
C:\C#Example\12>csc DllImport.cs C:\C#Example\12> DllImport |
외부의 User32.dll을 사용하기 위해서 아래와 같이 DllImport Attribute를 이용하고 있습니다. 매개변수로 해당 dll의 파일 이름을 명시해 주었으며, 해당 dll에서 사용하고자 하는 메서드를 아래와 같이 extern으로 표시해야 합니다.
n [DllImport("User32.dll")]
n public static extern int MessageBox(int i, string text, string title, int type);
▣ User32.Dll의 MessageBox함수 호출 순서 |
q 먼저, 사용하려는 메서드에서 DllImport Attribute를 지정 q DllImport Attribute에는 호출할 DLL의 이름을 기입 q 외부의 비관리(Unmanaged)코드에 있는 DLL을 특정 프로세스 메모리에 로딩 q 이 함수의 메모리 주소를 MessageBox() 메서드에 지정 q MessageBox()를 메서드 포인터처럼 사용함으로 C#에서 호출이 가능함 q extern 키워드 : 어떤 메서드가 현재 프로그램 외부에 있음을 나타내는 키워드 |
DllImport를 이용하여 해당 User32.dll에서 사용되는 MessageBox 메서드를 사용하겠다고 표시한 후 메서드를 사용하고 있습니다.
n MessageBox(0, "Messagebox test", "DllImport Test",2)
물론, 이 메서드를 호출하기 위해서는 Win32 API의 MessageBox의 메서드를 알고 있어야 합니다. 하지만, 이것은 특수한 경우에 사용하는 것입니다. C#에서 구현할 수 없는 것이나 다른 언어로 만든 dll을 사용하고자 할 때 사용하시면 됩니다. 즉, 다른 언어에서 만든 비관리코드를 사용하겠다는 것입니다. 이러한 목적이라면 아주 편리하게 사용할 수 있습니다.
From : http://www.jabook.net/jabook/csharp/CsharpLecture12/10000_10000_120000__10000_10000_120000.html
.Net 2.0 원격 DB 디버깅 (0) | 2008.04.04 |
---|---|
C#으로 Transactional Object에 Object Pooling을 사용하도록 구성하기 (0) | 2008.04.01 |
진법변환 (0) | 2008.04.01 |
Provider Infomation - SQL 수행 내용 확인 방법 (0) | 2008.04.01 |
비스타에서 설치 프로젝트 권한상승 하기 (0) | 2008.04.01 |