P/Invoke는 관리되는 코드에서 네이티브 코드의 구조, 콜백, 함수에 액세스할 수 있는 기술입니다.x86에서 P/Invoke 함수를 위한 기본 호출 방법은 __stdcall
입니다.자세한 내용은 P/Invoke에 대한 Microsoft의 문서를 참조하십시오.
P/Invoke 마셜링 규칙은 .NET 마셜링의 규칙과 동일합니다.그러나 Unity는 다음 타입을 지원하지 않습니다.
UWP(유니버설 Windows 플랫폼)에서는 특정 시스템 라이브러리로 플랫폼 호출을 하기 위해 DLL(동적 링크 라이브러리) 이름을 지정할 수 없습니다.프로젝트 외부의 DLL에 플랫폼 호출을 시도하면 런타임 시 DllNotFoundException이 발생합니다.따라서 DLL 이름 대신 __Internal
키워드를 사용하면 런타임 시 함수를 로드할 때가 아닌 프로젝트를 빌드할 때 C++ 링커를 사용하여 함수를 확인하게 됩니다.
[DllImport("__Internal")]
private static extern int CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);
관리되는 코드에서 함수를 선언할 때 오류가 발생하면 런타임 시 오류가 발생하는 것이 아니라 링커 오류가 발생합니다.즉, 런타임 중에 동적 로딩을 수행할 필요가 없고 함수가 직접 호출되므로 P/Invoke 호출의 오버헤드가 크게 감소합니다.