//c ::Msvcrt ::Msvcrt := ..raw.loadDll("Msvcrt.dll",,"cdecl"); namespace raw.c; memcmp = function(s1,s2,size){ if(size===null){ if(type.isString(s1)){ size = #s1; if(type.isString(s2) && (#s2!=size)) return #s2>> 0 强制转为无符号数,\n2、可以使用[API尾标]改变返回值为其他类型\n\n三、所有可用的【API尾标】:\n::User32.ApiNameW() 切换到Unicode版本,字符串UTF8-UTF16双向转换\n::User32.ApiNameA() 切换到ANSI版本,字符串不作任何转换\n::User32.ApiNameL() 返回值为64位LONG类型\n::User32.ApiNameP() 返回值为指针类型\n::User32.ApiNameD() 返回值为double浮点数\n::User32.ApiNameF() 返回值为float浮点数\n::User32.ApiNameB() 返回值为 C++ 中的8 位 bool 类型\n注意【尾标】前必须是小写字母 end intellisense*****/ /*****intellisense(::) ::Msvcrt = VC 基础运行库,这是所有操作系统都自带的系统 DLL。\nconsole,ustring,string.builder,raw.c 等标准库都自动加载了此 DLL。\n默认使用 cdecl 调用约定。\n!dllModule. ::Msvcrt.gethandle() = 返回句柄 ::Msvcrt.api("__/*输入函数名字*/","void()" ) = 声明Kernel32 API函数 ::Msvcrt.? = 可不用声明直接在此输入函数名并调用 AP I函数\n\n一、传入参数规则:\n1、null参数不可省略\n2、32位整数类型,小于32位的整数、以及枚举类型都可以直接在API参数中写数值。\n3、对于任何数值类型的指针(输出参数)一律使用结构体表示,例如double * v 表示为{ double v }\n4、数组使用结构体表示\n5、所有结构体传给API的都是指针地址,都是输出参数并增加返回值\n\n二、返回值规则:\n1、返回值默认为int类型,可用 >>> 0 强制转为无符号数,\n2、可以使用[API尾标]改变返回值为其他类型\n\n三、所有可用的【API尾标】:\n::User32.ApiNameW() 切换到Unicode版本,字符串UTF8-UTF16双向转换\n::User32.ApiNameA() 切换到ANSI版本,字符串不作任何转换\n::User32.ApiNameL() 返回值为64位LONG类型\n::User32.ApiNameP() 返回值为指针类型\n::User32.ApiNameD() 返回值为double浮点数\n::User32.ApiNameF() 返回值为float浮点数\n::User32.ApiNameB() 返回值为C++中的8位bool类型\n注意【尾标】前必须是小写字母 ::Msvcrt.memcmp(.(buffer1,buffer2,size) = 参数 @1,@2 可指定字符串、buffer、指针。\n参数 @3 必须指定比较长度。\n参数 @1,@2 存储数据相等时返回 0,不相等返回非 0 值。 end intellisense*****/