FcScript是由Forcal和MForcal支持的腳本控件,因而需要對(duì)Forcal的語(yǔ)法有一定的了解。FcScript僅僅對(duì)Forcal和MForcal進(jìn)行了包裝,因而了解Forcal,就是了解FcScript。
1.1 為什么使用FcScript
使用VBScript、JScript等腳本感覺(jué)太慢時(shí)需要使用FcScript。Forcal一級(jí)函數(shù)的計(jì)算速度約為(C/C++)或FORTRAN速度的50%左右,二級(jí)函數(shù)的速度稍有降低。
瀏覽由FcScript支持的網(wǎng)頁(yè)。
想設(shè)計(jì)COM組件為VBScript、JScript等腳本擴(kuò)充功能時(shí),推薦使用FcScript,因?yàn)樵O(shè)計(jì)一個(gè)Forcal擴(kuò)展動(dòng)態(tài)庫(kù)更容易,而且不降低效率(調(diào)用COM組件中的函數(shù)耗時(shí)較長(zhǎng))。
FcScript為所有宿主程序提供高速的腳本控制和無(wú)限的可擴(kuò)充性。
可以到天空軟件站或華軍軟件園下載Forcal、MForcal及OpenFc來(lái)進(jìn)一步了解Forcal。
1.2 如何注冊(cè)和注銷(xiāo)FcScript
下載FcScript
如果以上站點(diǎn)不能正常下載,可以到 我的blog1 我的blog2 上尋找一個(gè)合適的站點(diǎn)下載。
FcScript需要在windows中注冊(cè)后才能使用。雖然FcScript可放在磁盤(pán)的任何位置,但推薦將FcScript放在文件夾“c:\FcDll”中,因?yàn)镕cScript會(huì)自動(dòng)搜索該文件夾中的動(dòng)態(tài)庫(kù)進(jìn)行加載。以下假定FcScript及所有相關(guān)的動(dòng)態(tài)庫(kù)文件在文件夾“c:\FcDll”中。
注冊(cè)FcScript.dll:“開(kāi)始”->“運(yùn)行”:regsvr32 c:\FcDll\FcScript.dll
注銷(xiāo)FcScript.dll:“開(kāi)始”->“運(yùn)行”:regsvr32 /u c:\FcDll\FcScript.dll
如果你打算不再使用FcScript,一般先注銷(xiāo)FcScript,然后再刪除文件夾“c:\FcDll”。如果先刪除了文件夾“c:\FcDll”,需要用注冊(cè)表清理工具清理一下注冊(cè)表,不清理也無(wú)所謂啦。
1.3 訪(fǎng)問(wèn)FcScript支持的網(wǎng)頁(yè)
網(wǎng)頁(yè)1 網(wǎng)頁(yè)2 網(wǎng)頁(yè)3 網(wǎng)頁(yè)4
1.4 使用VBS文件演示FcScript
將以下VBScript文件保存為vbs文件進(jìn)行演示。
Set obj=CreateObject("FcScript.VBMForcal")
dim FcStr, nModule, hModule, err1, err2, iErrCode
FcStr="(:x)=FcGet(x),FcSet(x+11);" 'Forcal源程序
MsgBox FcStr
iErrCode=obj.VBComModule (FcStr, nModule, hModule, err1, err2 ) '編譯Forcal源程序?yàn)橐粋€(gè)模塊
If iErrCode=0 Then
err1=100.0
iErrCode=obj.VBSet(err1) '將實(shí)數(shù)參數(shù)傳送到FcScript
call obj.VBExeModule (hModule, CLng(0), CLng(0), CLng(0)) '執(zhí)行一個(gè)模塊
iErrCode=obj.VBGet(err1) '從FcScript獲得實(shí)數(shù)參數(shù)
MsgBox err1
Else
MsgBox iErrCode
End If
Set obj=Nothing
1.5 用網(wǎng)頁(yè)演示FcScript
將以下網(wǎng)頁(yè)代碼保存為htm文件進(jìn)行演示。需要允許網(wǎng)頁(yè)訪(fǎng)問(wèn)控件才能演示。
HTML>
HEAD>TITLE>一個(gè)FcScript簡(jiǎn)單例子/TITLE>
SCRIPT LANGUAGE="VBScript">
!--
Sub Button1_OnClickSet obj=CreateObject("FcScript.VBMForcal")
dim FcStr, nModule, hModule, err1, err2, iErrCode
FcStr="FcSet{"+document.Form1.ForStr.value+"};" 'Forcal源程序
MsgBox FcStr
iErrCode=obj.VBComModule (FcStr, nModule, hModule, err1, err2 ) '編譯Forcal源程序?yàn)橐粋€(gè)模塊
If iErrCode=0 Then
err1=100.0
iErrCode=obj.VBSet(err1) '將實(shí)數(shù)參數(shù)傳送到FcScript
call obj.VBExeModule (hModule, CLng(0), CLng(0), CLng(0)) '執(zhí)行一個(gè)模塊
iErrCode=obj.VBGet(err1) '從FcScript獲得實(shí)數(shù)參數(shù)
MsgBox err1
Else
MsgBox iErrCode
End If
Set obj=Nothing
End Sub
-->
/SCRIPT>
/HEAD>
BODY>
H3>一個(gè)FcScript簡(jiǎn)單例子/H3>HR>
FORM name="Form1" method="post" action="">
input type="text" name="ForStr" value="2-cos(2.3)*sqrt[9]" /> br> br>
INPUT NAME="Button1" TYPE="BUTTON" VALUE="單擊此處演示FcScript">
/FORM>
/BODY>
/HTML>
--------------------------------------------------------------------------------
2 FcScript語(yǔ)言參考 [目錄](méi)
以下是VBMForcal接口中實(shí)現(xiàn)的函數(shù)。所有接口參數(shù)都是VARIANT類(lèi)型。
2.1 VBMForcal接口中實(shí)現(xiàn)的函數(shù)
2.1.1 申請(qǐng)進(jìn)入或退出Forcal工作區(qū):VBUseForcal(iUse)
暫時(shí)用不到該方法。如果一定要用,可以參考MForcal中的函數(shù)UseForcal的說(shuō)明。
2.1.2 編譯源程序:VBComModule(FcStr,nModule,hModule,err1,err2)
將源程序中的表達(dá)式編譯為一個(gè)或多個(gè)模塊。源程序中可以用#MODULE#和#END#定義一個(gè)子模塊。即#MODULE#和#END#之間的表達(dá)式定義為一個(gè)子模塊。在模塊中,以~開(kāi)頭的表達(dá)式被編譯為正模塊號(hào)表達(dá)式,能被其他模塊訪(fǎng)問(wèn)到,其余的表達(dá)式均被編譯為負(fù)模塊號(hào)表達(dá)式,其他模塊無(wú)法訪(fǎng)問(wèn)。
FcStr:指向源程序的字符串。
nModule:返回多個(gè)模塊的最小模塊號(hào)。一般用不到該參數(shù)。必須是長(zhǎng)整數(shù)!
hModule:返回模塊的句柄,用于執(zhí)行該模塊。必須是長(zhǎng)整數(shù)!
err1和err2:返回編譯出錯(cuò)位置。必須是長(zhǎng)整數(shù)!目前出錯(cuò)位置還不準(zhǔn)確:若源代碼全部是英文,出錯(cuò)位置是準(zhǔn)確的;如果源代碼中有漢字,出錯(cuò)位置不準(zhǔn)確。
該函數(shù)返回編譯代碼,若為0表示編譯通過(guò)。返回值是長(zhǎng)整數(shù)!
詳細(xì)請(qǐng)參考MForcal中的函數(shù)ComModule的說(shuō)明。
2.1.3 執(zhí)行程序:VBExeModule(hModule,outl,outd,outc)
hModule:編譯源程序時(shí)得到的模塊的句柄。必須是長(zhǎng)整數(shù)!
outl、outd、outc:一般這三個(gè)參數(shù)設(shè)為0,必須是長(zhǎng)整數(shù)!
詳細(xì)請(qǐng)參考MForcal中的函數(shù)ExeModule的說(shuō)明。
2.1.4 刪除模塊:VBDeleteModule(hModule)
hModule:編譯源程序時(shí)得到的模塊的句柄。必須是長(zhǎng)整數(shù)!
詳細(xì)請(qǐng)參考MForcal中的函數(shù)ExeModule的說(shuō)明。
2.1.5 加載Forcal動(dòng)態(tài)庫(kù)擴(kuò)展:VBLoadDll(str)
FcStr:含有Forcal擴(kuò)展動(dòng)態(tài)庫(kù)名稱(chēng)的字符串。
FcScript允許加載多個(gè)Forcal擴(kuò)展動(dòng)態(tài)庫(kù)。Forcal擴(kuò)展動(dòng)態(tài)庫(kù)名字要放在雙引號(hào)"..."之間。忽略在尖括號(hào)"..." ...>內(nèi)的Forcal擴(kuò)展動(dòng)態(tài)庫(kù)。
例如:"FcData32","d:\\FcDll\\ofc32"
需要注意Forcal擴(kuò)展動(dòng)態(tài)庫(kù)的加載順序。
該函數(shù)會(huì)自動(dòng)加載文件夾“c:\FcDll”中的動(dòng)態(tài)庫(kù)。
2.1.6 向FcScript緩沖區(qū)傳送數(shù)據(jù):VBSet(Val)
在FcScript中有一個(gè)緩沖區(qū),VBScript和緩沖區(qū)可以相互傳送數(shù)據(jù)。在VBScript中使用該函數(shù)可以將Val數(shù)據(jù)傳送到該緩沖區(qū),函數(shù)返回操作狀態(tài)。
目前,該函數(shù)只能將一個(gè)長(zhǎng)整數(shù)或雙精度實(shí)數(shù)傳送到緩沖區(qū)。以后再增加傳送數(shù)組或字符串等數(shù)據(jù)。
如果Val是長(zhǎng)整數(shù),將傳送到長(zhǎng)整數(shù)緩沖區(qū);如果Val是雙精度實(shí)數(shù),將傳送到雙精度實(shí)數(shù)緩沖區(qū),以此類(lèi)推。函數(shù)返回值目前為傳送數(shù)據(jù)的個(gè)數(shù)。
2.1.7 從FcScript緩沖區(qū)獲得數(shù)據(jù):VBGet(Val)
在FcScript中有一個(gè)緩沖區(qū),VBScript和緩沖區(qū)可以相互傳送數(shù)據(jù)。在VBScript中使用該函數(shù)可以將緩沖區(qū)中的數(shù)據(jù)傳送到Val中,函數(shù)返回操作狀態(tài)。
目前,該函數(shù)只能將緩沖區(qū)中的一個(gè)長(zhǎng)整數(shù)或雙精度實(shí)數(shù)傳送到Val。以后再增加傳送數(shù)組或字符串等數(shù)據(jù)。
如果Val是長(zhǎng)整數(shù),將獲得緩沖區(qū)中的長(zhǎng)整數(shù)數(shù)據(jù);如果Val是雙精度實(shí)數(shù),將獲得緩沖區(qū)中的雙精度實(shí)數(shù)數(shù)據(jù),以此類(lèi)推。函數(shù)返回值目前為傳送數(shù)據(jù)的個(gè)數(shù)。
2.1.8 重新初始化Forcal:ReInitForcal()
使Forcal恢復(fù)至剛剛加載時(shí)的狀態(tài)。
2.2 FcScript中的Forcal二級(jí)函數(shù)
2.2.1 向FcScript緩沖區(qū)傳送數(shù)據(jù)[整數(shù)函數(shù),實(shí)數(shù)函數(shù)]:FcSet(x1,x2,... ...)
在FcScript中有一個(gè)緩沖區(qū),緩沖區(qū)和Forcal可以相互傳送數(shù)據(jù)。在Forcal中使用該函數(shù)可以將數(shù)據(jù)x1,x2,... ...傳送到該緩沖區(qū),函數(shù)總是返回0。
在整數(shù)表達(dá)式中,將把數(shù)據(jù)傳送到整數(shù)緩沖區(qū);在實(shí)數(shù)表達(dá)式中,將把數(shù)據(jù)傳送到實(shí)數(shù)緩沖區(qū)。
2.2.2 從FcScript緩沖區(qū)獲得數(shù)據(jù)[整數(shù)函數(shù),實(shí)數(shù)函數(shù)]:FcSet(x1,x2,... ...)
在FcScript中有一個(gè)緩沖區(qū),緩沖區(qū)和Forcal可以相互傳送數(shù)據(jù)。在Forcal中使用該函數(shù)可以將緩沖區(qū)中的數(shù)據(jù)傳送到x1,x2,... ...,必須使用引用參數(shù),函數(shù)總是返回0。
在整數(shù)表達(dá)式中,將獲得整數(shù)緩沖區(qū)中的數(shù)據(jù);在實(shí)數(shù)表達(dá)式中,將獲得實(shí)數(shù)緩沖區(qū)中的數(shù)據(jù)。
--------------------------------------------------------------------------------
3 FcScript源代碼 [目錄](méi)
由于作者對(duì)com、atl、web不熟悉,維護(hù)FcScript較困難,如果你是這方面的高手,可以下載FcScript的源代碼加以維護(hù)。
下載1
如果以上站點(diǎn)不能正常下載,可以到 我的blog1 我的blog2 上尋找一個(gè)合適的站點(diǎn)下載。