.NET9 FCall/QCall调用约定
原文中文,约3600字,阅读约需9分钟。
📝
内容提要
FCall/Qcall是托管与非托管之间的调用约定,双方需要一个契约,以弥合彼此的互相/单向调用。FCall用于托管调用非托管函数,而QCall用于托管调用非托管导出函数。
❓
Q&A
FCall和QCall的主要区别是什么?
FCall用于托管调用非托管函数,而QCall用于托管调用非托管导出函数。
非托管调用约定有哪些类型?
非托管调用约定有四种:thiscall、stdcall、cdecl和fastcall。
FCall是如何确保调用约定正确的?
FCall通过宏定义重新排序参数和返回值,确保调用约定的正确性。
什么是FCIMPL宏定义,它的作用是什么?
FCIMPL宏定义用于实现FCall,确保调用约定正确并处理参数的顺序。
stdcall调用约定的特点是什么?
stdcall一般用于win32 API,自身清理堆栈,从右往左传递参数。
QCall是如何在托管代码中使用的?
QCall一般使用导出标记extern,遵循平台标准进行托管调用非托管导出函数。
🏷️