.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用于非托管导出的函数调用。
🏷️

标签

➡️

继续阅读