.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,遵循平台标准进行托管调用非托管导出函数。

🏷️

标签

➡️

继续阅读