Show/Hide Toolbars

XSharp

 

X# 编译器支持以下伪函数

 

函数

描述

PCOUNT()

此伪函数仅在使用 CLIPPER 调用约定的方法或函数中可用。

它返回传递给函数的参数个数。该函数不期望也不允许有任何参数。
在 Core 方言中不可用。

ARGCOUNT()

此伪函数返回为当前方法或函数定义的参数数量。

_GETMPARAM() and _GETFPARAM()

这些伪函数仅在具有 CLIPPER 调用约定的方法或函数中可用。

您可以使用它们按位置检索函数参数。您必须向这些函数传递一个数字表达式。如果在运行时传递的数字大于实际参数数,则会出现数组访问异常。
在 Core 方言中不可用。

String2Psz() and Cast2Psz()

这些伪函数用于将 DotNet 字符串转换为非托管的 Ansi PSZ 字符串。不仅创建了 PSZ,这些函数还改变了代码生成,并设置了代码,以便在创建这些函数的函数退出时清除分配的 PSZ 变量。
在 Core 方言中不可用。

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 之间的字面数字时,编译器会将函数调用替换为带有该值字符的字面字符串。较大的数值不会在编译时进行转换,而是在运行时进行转换,因为这些数字与代码页有关。

因此,表达式如
"Hello world"+Chr(13)+Chr(10)
将被翻译成一个包含 "Hello world "的字面字符串,后面是 CRLF 字符(编译器会在编译时将字符串连接起来)。