FORCAL系统扩展动态库FcSystem
目 录
2 Forcal系统常量 | |
sys::fcfor | 用于通过函数new申请表达式对象:new[sys::fcfor] 。通过这种方式申请的对象不能由函数oo自动销毁,故不推荐使用。 |
sys::CLOCKS_PER_SEC | 每秒流逝过去的时钟脉冲数。 |
sys::nlen | 一个整数或实数所占宽字节数。 |
sys::fcfor() | 整数函数、实数函数。申请表达式对象。在oo函数中调用该函数,将返回临时对象,否则返回一般对象 |
sys::comfor | 将Forcal静态字符串编译为表达式 |
sys::comfors | 将FcData字符串编译为表达式 |
sys::testfcfor | 测试fcfor是否有效 |
sys::call | 动态调用表达式 |
sys::rearray | 数组维数反序 |
sys::A | 设置或获得多维数组元素的值 |
sys::SA | 将多维数组视为一维数组,设置多个数组元素 |
sys::GA | 将多维数组视为一维数组,获得多个数组元素 |
sys::setnn | 设置静态整数(实数)数组元素的值 |
sys::getnn | 获得静态整数(实数)数组元素的值 |
4 操作系统函数 |
|
sys::clock | 获取流逝过去的时钟脉冲数。 |
sys::ShellExecute | 执行外部程序函数 |
sys:: |
1 什么是FcSystem [返回页首]
FcSystem32W.dll是一个Forcal系统扩展动态库,主要包含一些增强Forcal系统功能的函数和与操作系统有关的函数。
在FcSystem中的函数是通过二级函数命名空间“sys”输出的,所有函数均具有类似“sys::call(...)”的格式。使用!using("sys");可简化FcSystem中的函数访问。
FcSystem32W.dll需要FcData32W.dll的支持,FcData32W.dll要先于FcSystem32W.dll加载。
3 Forcal系统函数 [返回页首]
[返回页首][整数函数、实数函数] sys::comfor(pFcFor,"f(x,y)=x+y",ForType,hModule,&ErrBegin,&ErrEnd):将Forcal静态字符串编译为表达式
pFcFor:保存Forcal表达式(函数)句柄的FcData数据指针。由pFcFor=new[sys::fcfor]申请
的对象,不用时用delete[pFcFor]销毁;在oo函数中用sys::fcfor()申请的对象,无需使用delete函数。每次编译前,将销毁pFcFor中原先保存的表达式。
"f(x,y)=x+y":Forcal表达式(函数)。必须提供一个函数名,否则无法访问。
ForType:表达式的类型。ForType=1表示整数表达式,ForType=2表示实数表达式,ForType=3表示复数表达式。
hModule:表达式所在模块。如果hModule是一个正数,编译为全局表达式,否则编译为私有表达式。
ErrBegin,ErrEnd:编译出错时返回出错位置。
返回值:错误代码。返回0表示没有错误。
说明:如果表达式编译成功,可以直接调用该表达式。如果要将表达式传给一个函数,需要用HFor(...)函数获得该表达式的句柄。
运行错误:1:指针pFcFor非法;2:非法的Forcal静态字符串地址;3:非法的表达式类型。
[例子1] 该例子需要FcData32W.dll的支持。
!using("sys"); //使用命名空间sys
i: !(::pf)= pf=new[fcfor],comfor(pf,"f(x)=x+1",2,100,0,0); //申请保存Forcal表达式句柄的FcData数据指针,然后将Forcal静态字符串编译为全局的实数表达式
f[5]; //直接调用函数f
(:y)= call[2,HFor("f"):5:&y],y; //动态调用函数f
i: (::pf)= delete[pf]; //销毁pf及表达式
[例子2] 该例子需要FcData32W.dll的支持。
!using("sys"); //使用命名空间sys
!(::pf)= pf=newr[fcfor],comfor(pf,"f(x)=x+1",2,100,0,0); //申请保存Forcal表达式句柄的FcData数据指针,然后将Forcal静态字符串编译为全局的实数表达式
f[5]; //直接调用函数f
(:y)= call[2,HFor("f"):5:&y],y; //动态调用函数f
(::pf)= delete[pf]; //销毁pf及表达式
[例子3] 该例子需要FcData32W.dll的支持。
!using("sys"); //使用命名空间sys
main(:pf,a)=
oo{pf=fcfor()}, //申请保存Forcal表达式句柄的FcData数据指针,
comfor(pf,"f(x)=x+1",2,100,0,0), //将Forcal静态字符串编译为全局的实数表达式
a=HFor("f"), //获得函数f的句柄
a[5]; //动态调用函数f
[返回页首][整数函数、实数函数] sys::comfors(pFcFor,pStr,ForType,hModule,&ErrBegin,&ErrEnd):将FcData字符串编译为表达式
pFcFor:保存Forcal表达式(函数)句柄的FcData数据指针。由pFcFor=new[sys::fcfor]申请
的对象,不用时用delete[pFcFor]销毁;在oo函数中用sys::fcfor()申请的对象,无需使用delete函数。每次编译前,将销毁pFcFor中原先保存的表达式。
pStr:FcData字符串指针,包含Forcal表达式(函数)。必须提供一个函数名,否则无法访问。
ForType:表达式的类型。ForType=1表示整数表达式,ForType=2表示实数表达式,ForType=3表示复数表达式。
hModule:表达式所在模块。如果hModule是一个正数,编译为全局表达式,否则编译为私有表达式。
ErrBegin,ErrEnd:编译出错时返回出错位置。
返回值:错误代码。返回0表示没有错误。
说明:如果表达式编译成功,可以直接调用该表达式。如果要将表达式传给一个函数,需要用HFor(...)函数获得该表达式的句柄。
运行错误:1:指针pFcFor或者pStr非法;2:非法的表达式类型。
[返回页首][整数函数、实数函数] sys::testfcfor(pFcFor):测试fcfor是否有效
pFcFor:保存Forcal表达式(函数)句柄的FcData数据指针。由pFcFor=new[sys::fcfor]或pFcFor=sys::fcfor()申请的对象。
返回值:如果pFcFor包含有效的表达式,返回表达式句柄(该句柄与用HFor(...)函数获得的表达式句柄完全相同),否则返回NULL。如果pFcFor非法,也返回NULL。
[返回页首][整数函数、实数函数] sys::call(ForType,ForHandle : x0,x1,x2,... : &r0,...):动态调用表达式
ForType,ForHandle:表达式的类型及句柄。ForType=1表示整数表达式,ForType=2表示实数表达式,ForType=3表示复数表达式。
x0,x1,x2,...:表达式参数。调用整数或实数表达式时,参数个数与表达式参数个数相同;调用复数表达式时,参数个数为表达式参数个数的2倍。
&r0,...:表达式的返回值。ForType=1或ForType=2时只有&r0;ForType=3时为&r0,&r1。必须使用引用参数。
说明:表达式调用成功时返回1,否则返回0。
运行错误:1:至少需要3个参数;2:非法的表达式类型;3:调用整数表达式时参数不匹配;4:调用实数表达式时参数不匹配;5:调用复数表达式时参数不匹配;6:非法的表达式句柄。
[例子] 该例子需要FcData32W.dll的支持。
!using("sys");
i:a(x)= x=x+1;
b(x)= x=x+1;
c:c(x)= x=x+1+i;
i:(:y)= call[1,HFor("a",1):11:&y],y;
(:y)= call[1,HFor("a",1):rtoi(11):&y],itor(y);
i:(:a,b,s)= s=new[string,80,EndType:"22"],StrToFCD[s,real:&a],call[2,HFor("b",2):a:&b],FCDToStr[real:b:s],printff["\r\n结果:{1,s}\r\n",s];
i:(:a,b,c,d,s)=
{
s=new[string,80,EndType:"2-2i"], //申请一个字符串,存放一个复数
StrToFCD[s,complex:&a,&b], //将复数转换并保存到a,b
call[3,HFor("c",3):a,b:&c,&d], //调用复数表达式c,返回值保存到c,d
FCDToStr[complex:c,d:s], //将复数c,d转换为字符串并保存到s
printff["\r\n结果:{1,s}\r\n",s] //输出字符串s
};
[返回页首][整数函数、实数函数] sys::rearray(Array):数组维数反序。
Array:FcData数组指针。
返回值:Array。
运行错误:1:数组指针Array非法。
说明:举例来说,对于三维数组Array[2,3,5],调用该函数后,将成为Array[5,3,2]。
[返回页首][实数函数] sys::A(array,k1,k2,... ... : x):设置或获得多维数组元素的值
设置多维实数数组array的元素k1,k2,... ...
的值为x,返回array。若缺省x,则获得多维实数数组array的元素k1,k2,... ... 的值。
该函数可能返回如下运行错误:1:至少需要2个参数;2:无效的数组指针;3:数组维数错误;4:数组维数非法。
[返回页首][实数函数] sys::SA(array,&k,x1,x2,... ...):将多维数组视为一维数组,设置多个数组元素
将数值x1,x2,...
...在多维实数数组array(数组元素按行存放)中从地址k开始连续存放。地址k使用取地址操作符&时返回下一个存放地址,因此可以连续使用该函数在同一数组中存放若干数值。返回array。
该函数可能返回如下运行错误:1:至少需要2个参数;2:无效的数组指针;3:数组元素地址错误;4:数组元素个数不够。
[返回页首][实数函数] sys::GA(array,&k,&x1,&x2,... ...):将多维数组视为一维数组,获得多个数组元素
从多维实数数组array(数组元素按列存放)中地址k开始连续取数组元素存放在变量x1,x2,... ...中。地址k及变量x1,x2,...
...前须用取地址操作符&,否则不能返回值。地址k使用取地址操作符&时返回下一个数组元素地址,因此可以连续使用该函数在同一数组中取若干数值。返回array。
该函数可能返回如下运行错误:1:至少需要2个参数;2:无效的数组指针;3:数组元素地址错误;4:数组元素个数不够。
[返回页首][整数函数、实数函数] sys::setnn(array,x1,x2,... ...):设置静态整数(实数)数组元素的值
将数值x1,x2,...
...在静态整数(实数)数组array中连续存放。返回array。
该函数可能返回如下运行错误:1:至少需要1个参数;2:数组元素地址错误。
[返回页首][整数函数、实数函数] sys::getnn(array,&x1,&x2,... ...):获得静态整数(实数)数组元素的值
从静态整数(实数)数组array中连续取数组元素存放在变量x1,x2,... ...中。返回array。
该函数可能返回如下运行错误:1:至少需要1个参数;2:数组元素地址错误。
[返回页首][整数函数、实数函数] sys::clock():获取流逝过去的时钟脉冲数。
[返回页首][整数函数] sys::ShellExecute(hwnd,"lpOperation","lpFile","lpParameters","lpDirectory",nShowCmd):执行外部程序函数
hwnd:窗口句柄,一般为null(0);
lpOperation:指定本命令所要执行的动作;
lpFile:指定本命令所要操作的文件;
lpParameters:指定操作文件时所使用的参数;
lpDirectory:指定本命令所使用的缺省路径;
nShowCmd:显示方式。
运行错误:1:指定的字符串不存在。
例子:该例子需要FcData32W.dll的支持。
打开一个应用程序:i: sys::ShellExecute(null(0),"open","calc.exe","","",0);
打开一个网页:i: sys::ShellExecute(null(0),"open","http://blog.csdn.net/forcal","","",0);
用系统打印机打印文档:i: sys::ShellExecute(null(0),"print","openfc.ini","","",0);
查找文件:i: sys::ShellExecute(null(0),"find","","","",0);
版权所有© Forcal程序设计
2002-2010,保留所有权利
E-mail: forcal@sina.com
QQ:630715621
最近更新:
2011年05月13日