X# 编译器支持以下伪函数
函数 |
描述 |
PCOUNT() |
此伪函数仅在使用 CLIPPER 调用约定的方法或函数中可用。 它返回传递给函数的参数个数。该函数不期望也不允许有任何参数。 |
ARGCOUNT() |
此伪函数返回为当前方法或函数定义的参数数量。 |
_GETMPARAM() and _GETFPARAM() |
这些伪函数仅在具有 CLIPPER 调用约定的方法或函数中可用。 您可以使用它们按位置检索函数参数。您必须向这些函数传递一个数字表达式。如果在运行时传递的数字大于实际参数数,则会出现数组访问异常。 |
String2Psz() and Cast2Psz() |
这些伪函数用于将 DotNet 字符串转换为非托管的 Ansi PSZ 字符串。不仅创建了 PSZ,这些函数还改变了代码生成,并设置了代码,以便在创建这些函数的函数退出时清除分配的 PSZ 变量。 |
ALTD() |
该函数将在检查调试器是否已连接(System.Diagnostics.Debugger.IsAttached)时插入对System.Diagnostics.Debugger.Break 的调用。 |
_GetInst() |
该函数将返回当前模块的模块句柄。在幕后,它被转换为 System.Runtime.InteropServices.Marshal.GetHINSTANCE(TypeOf(FunctionsClass):Module) |
PCALL() and CCALL() |
这些方法用于调用强类型 PTR 的 API 函数。 函数的第一个参数是 PTR 类型,其他参数必须与 PTR 类型所指向的函数中定义的参数相匹配。 编译器会创建一个具有适当原型的委托,并使用 Marshal.GetDelegateForFunctionPointer() 调用函数。 |
PCallNative<Type>() and CCallNative<Type>() |
这些方法用于调用无类型 PTR 的 API 函数。 函数需要一个表示返回类型的通用类型参数和一个 PTR 类型的第一个参数。其他参数是允许的,但不得指向托管内存。 编译器会创建一个具有适当原型的委托,并使用 Marshal.GetDelegateForFunctionPointer() 调用函数。 |
_ARGS() |
编译器会将该伪函数返回值替换为对采用 CLIPPER 调用约定的函数/方法生成的参数数组的引用 |
SLen() |
编译器将此函数转换为调用字符串的 Length 属性,并内置 NULL 检查。 |
Chr(), _Chr() |
当该函数的数字参数是介于 0 和 127 之间的字面数字时,编译器会将函数调用替换为带有该值字符的字面字符串。较大的数值不会在编译时进行转换,而是在运行时进行转换,因为这些数字与代码页有关。 因此,表达式如 |