플랫폼 호출을 사용하여 데이터 마샬링

관리되지 않는 라이브러리에서 내보낸 함수를 호출하려면 .NET Framework 응용 프로그램에서는 관리되지 않는 함수를 나타내는, 관리 코드의 함수 프로토타입이 있어야 합니다. 플랫폼 호출에서 데이터를 올바르게 마샬링할 수 있도록 하는 프로토타입을 만들려면 다음을 수행해야 합니다.

  • 관리 코드의 정적 함수 또는 메서드에 DLLImportAttribute 특성을 적용합니다.

  • 관리되지 않는 데이터 형식을 관리되는 데이터 형식으로 대체합니다.

관리되지 않는 함수와 함께 제공되는 설명서를 사용하면 선택적 필드가 포함된 특성을 적용하고 관리되지 않는 형식을 관리되는 데이터 형식으로 대체함으로써 이와 동등한 관리되는 프로토타입을 생성할 수 있습니다. DllImportAttribute의 적용 방법에 대한 자세한 내용은 관리되지 않는 DLL 함수 사용을 참조하십시오.

이 단원의 샘플에서는 관리되지 않는 라이브러리에서 내보낸 함수에 인수를 전달하고 해당 함수로부터 반환 값을 받기 위한 관리되는 함수 프로토타입을 만드는 방법을 보여 줍니다. 이 샘플에서는 MarshalAsAttribute 특성 및 Marshal 클래스를 사용하여 데이터를 명시적으로 마샬링하는 시기도 보여 줍니다.

단원 내용

  • 플랫폼 호출 데이터 형식
    관리되는 데이터 형식과 이에 해당하는 관리되지 않는 데이터 형식의 목록을 제공합니다.

  • PinvokeLib.dll
    Pinvoke.dll에서 제공하는 라이브러리 함수를 정의하는 코드를 제공합니다.

  • 문자열 마샬링
    문자열을 값 및 참조로 전달하는 방법과 구조체, 클래스 및 배열에서 전달하는 방법에 대해 설명합니다.

  • 클래스, 구조체 및 공용 구조체 마샬링
    클래스를 값으로 전달하는 방법, 다양한 구조체를 전달하는 방법, 그리고 값 및 혼합 형식이 있는 공용 구조체를 전달하는 방법에 대해 설명합니다.

  • 형식 배열 마샬링
    다차원 정수 배열을 값으로 전달하는 방법과 1차원 배열을 참조로 전달하는 방법에 대해 설명합니다.

  • 기타 마샬링 샘플
    interop 마샬링 동작에 영향을 주는 가비지 수집 및 스레딩의 특징에 대해 설명합니다.

관련 단원