P/Invoke

조각지식 2007. 8. 7. 23:41

닷넷에서 C나 C++로 작성한 DLL의 함수를 호출하려면 P/Invoke를 이용해야 합니다. 이것은 Interop이라는 일종의 서비스이데 직접 Native 코드를 호출하는 것과는 다릅니다. 당연히 속도도 직접 호출의 경우보다는 좀 떨어지겠죠. 그렇지만 기존에 작성된 코드를 사용할 수 있다는 점에서 유용합니다.

만약 C로 작성된 다음과 같은 함수가 MyDLL.dll에 있다고 해보죠.

int AddInteger(int a,int b)
{
    return a + b;
}


C#에서 이 함수를 호출하려면 다음과 같은 선언을 해줘야 합니다.

using System;
using System.Runtime.InteropServices; //P/Invoke를 하려면 이걸 선언해 줘야 합니다.

class PlatformInvokeTest
{
    [DllImport("MyDLL.dll")]  //만약 함수명이 다를 경우 EntryPoint="function_name" 을 지정해줘야 합니다.
    public static extern int AddInteger(int a,int b); 
    //외부에 정의된 함수이므로 extern을 지정해줘야 하고 static이어야 합니다.

    public static void Main()
    {
        int i = AddInteger(1, 2);
        Console.WriteLine(i);
    }
}


더 자세한 내용은
Calling Win32 DLLs in C# with P/Invoke

'조각지식' 카테고리의 다른 글

Non Client 영역 칠하기 ( ex : 타이틀 바 )  (0) 2008.12.08
GoF Design Pattern 요약  (0) 2008.04.12
P/Invoke  (0) 2007.08.07
C#과 C++ 사이의 interop  (0) 2007.08.07
이펙트 블랜딩 공식  (0) 2007.05.04
사양측정  (0) 2007.05.03
Posted by 자갈공명 zagalnet

댓글을 달아 주세요