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