c# cdecl
및 c __ stdcall
p/insoke에서 공존에 대한 이유
C#과 C 사이의 상호 운용성을 호출하면 C# 함수가 cdecl
컨벤션을 사용하는 반면, 해당 함수는 __ stdcall
서명을 사용하는 경우가 종종 있습니다. 이 불일치는 역사적으로 오늘날까지 계속 된 콜 컨벤션 선택에서 비롯됩니다.
__ stdcall : Windows 함수의 발신자는
__ stdcall
__ cdecl
]
__ cdecl
는 printf ()
및 scanf ()
와 같은 가변 수의 매개 변수가있는 함수에 대한 C의 표준 호출 컨벤션입니다. 이 컨벤션은 발신자가 전달 된 매개 변수 수를 알고 있기 때문에 발신자에게 스택 청소에 대한 책임을집니다. callingconvention.cdecl
선언을 지정하는 것이 일반적인 함정입니다.
__ thiscall
__ thiscall
는 특별히 C를 말합니다.이 클래스의 인스턴스 방법 에서이
포인터를 전달하는 것을 처리합니다. __ cdecl
와 유사하지만 .NET P/Invoke Marshalling 핸들러는이를 지원하지 않으므로 Pinvoke C 코드에 적합하지 않습니다.
요약
cdecl 의
의 에서 c#에서
__ stdcall 서명의 공존은 이러한 역사적 전화 규칙과 각 언어 별 요구 사항의 결과입니다. 이러한 규칙에 대한 적절한 이해와
EntryPoint 및
ExactSpelling 속성의
속성은 올바른 p/호출 기능을 보장하고 스택 불균형과 같은 잠재적 인 문제를 피하는 데 중요합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3