다음을 통해 공유


관리되지 않는 DLL 함수 사용

플랫폼 호출은 관리 코드가 Windows API와 같은 DLL(동적 링크 라이브러리)에 구현된 관리되지 않는 함수를 호출할 수 있도록 하는 서비스입니다. 필요에 따라 내보낸 함수를 찾아서 호출하고, 필요에 따라 상호 운용 경계를 넘어 해당 인수(정수, 문자열, 배열, 구조 등)를 마샬링합니다.

이 섹션에서는 관리되지 않는 DLL 함수 사용과 관련된 작업을 소개하고 플랫폼 호출에 대한 자세한 정보를 제공합니다. 다음 작업 외에도 일반적인 고려 사항과 추가 정보 및 예제를 제공하는 링크가 있습니다.

내보낸 DLL 함수를 사용하려면

  1. DLL에서 함수를 식별합니다.

    최소한 함수의 이름과 함수를 포함하는 DLL의 이름을 지정해야 합니다.

  2. DLL 함수를 저장할 클래스를 만듭니다.

    기존 클래스를 사용하거나, 관리되지 않는 각 함수에 대해 개별 클래스를 만들거나, 관련된 관리되지 않는 함수 집합을 포함하는 하나의 클래스를 만들 수 있습니다.

  3. 관리 코드에서 프로토타입을 만듭니다.

    [Visual Basic] FunctionLib 키워드와 함께 Declare 문을 사용합니다. 경우에 따라 공유 함수 키워드와 함께 DllImportAttribute를 사용할 수 있습니다. 이러한 경우는 이 섹션의 뒷부분에 설명되어 있습니다.

    [C#] DllImportAttribute 를 사용하여 DLL 및 함수를 식별합니다. 정적extern 한정자를 사용하여 메서드를 표시합니다.

    [C++] DllImportAttribute 를 사용하여 DLL 및 함수를 식별합니다. 래퍼 메서드 또는 함수를 extern "C"로 표시합니다.

  4. DLL 함수를 호출합니다.

    다른 관리되는 메서드와 마찬가지로 관리되는 클래스에서 메서드를 호출합니다. 구조를 전달 하고 콜백 함수를 구현하는 것은 특별한 경우입니다.

를 생성하는 방법을 보여 주는 예제입니다. 플랫폼 호출과 함께 사용할 NET 기반 선언은 플랫폼 호출을 사용하여 데이터 마샬링을 참조하세요.

플랫폼 호출에 대해 자세히 살펴보기

플랫폼 호출은 메타데이터를 사용하여 내보낸 함수를 찾고 런타임에 해당 인수를 마샬링합니다. 다음 그림에서 이 프로세스를 나타냅니다.

플랫폼 호출을 보여주는 다이어그램

플랫폼 호출은 관리되지 않는 함수를 호출할 때 다음 작업 시퀀스를 수행합니다.

  1. 함수가 포함된 DLL을 찾습니다.

  2. DLL을 메모리에 로드합니다.

  3. 메모리에서 함수의 주소를 찾고 필요에 따라 데이터를 마샬링하여 해당 인수를 스택에 푸시합니다.

    비고

    DLL을 찾아서 로드하고 메모리에 있는 함수의 주소를 찾는 작업은 함수에 대한 첫 번째 호출에서만 발생합니다.

  4. 관리되지 않는 함수로 컨트롤을 전송합니다.

플랫폼 호출은 관리되지 않는 함수에서 발생한 예외를 관리되는 호출자에게 던집니다.

참고하십시오