.NET9 FCall/QCall调用约定
💡
原文中文,约3600字,阅读约需9分钟。
📝
内容提要
FCall/Qcall是托管与非托管之间的调用约定,双方需要一个契约,以弥合彼此的互相/单向调用。FCall用于托管调用非托管函数,而QCall用于托管调用非托管导出函数。
🎯
关键要点
- FCall/Qcall是托管与非托管之间的调用约定。
- 非托管调用约定有四种:thiscall、stdcall、cdecl、fastcall。
- thiscall使用特定寄存器传递当前类指针,堆栈由自身清理。
- stdcall一般用于win32 API,自身清理堆栈,从右往左传参。
- cdecl调用者清理堆栈,从右往左传参,常用于MFC框架。
- fastcall通过寄存器传递前几个参数,剩余参数用栈传递。
- FCall用于托管调用非托管函数,确保双方有约定以保持一致性。
- FCall通过宏定义重新排序参数和返回值。
- FCIMPL宏定义用于实现FCall,确保调用约定正确。
- QCall用于托管调用非托管导出函数,遵循平台标准。
- FCall是托管调用非托管的约定,QCall用于非托管导出的函数调用。
🏷️
标签
➡️