상세 컨텐츠

본문 제목

DllImport Attribute

C#

by 탑~! 2008. 4. 1. 10:07

본문

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;
using System.Runtime.InteropServices;

class
DllImport{
  
  [DllImport(
"User32.dll"
)]
 
public static extern int  MessageBox(int i, string text,  string title, int
type);
  
 
public static void
Main(){
    MessageBox(
0, "Messagebox test","DllImport Test",2
);  
  } 
//main
} //class

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

관련글 더보기