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 호출의 오버헤드가 크게 감소합니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.