外部函式
SPEL+ 程式可透過 Declare 陳述式,執行於 DLL 中定義的外部函式。此機制自舊版 RC+ 即已存在,且 DLL 必須為 32 位元原生格式。
在 Extension 開發套件中,提供了橋接 DLL,使 SPEL+ 程式能夠呼叫作為 64 位元組件的 Extension 內部函式。這就是 Extension 的「外部函式」擴展點。
呼叫此「外部函式」的格式如下所示。
請於 SPEL+ 程式中插入以下 Declare 陳述式。
Declare CallExternal, "C:\EpsonRC80\ExternalFunctionBridge.dll", "CallExternal",(commandLine$ As String, ByRef output$ As String) As Int32commandLine$:儲存以空格分隔函式名稱與參數的命令列字串
output$:用於儲存函式輸出的字串變數
傳回值為函式執行的結果碼
- 0 表示正常結束(成功)
- 非 0 表示錯誤
(範例)
Int32 ret String output$ ret = CallExternal("CubeRoot 10.0", ByRef output$) Print output$- 於 Run 視窗中會輸出 2.154434690031884。
若要使用此擴展點,需實作並匯出委派 RCXExternalFunction,並將函式名稱作為中繼資料一併匯出。
[Export(typeof(RCXExternalFunction))]
[ExportMetadata("Name", "CubeRoot")]
public RCXExternalFunction CubeRoot = (command, parameters) =>
{
if (parameters.Count == 0 || !double.TryParse(parameters[0], out var input))
{
return ValueTuple.Create(RCXResult.BadArgument, string.Empty);
}
double output = Math.Cbrt(input);
return ValueTuple.Create(RCXResult.Success, output.ToString());
};
透過此擴展點,可讓 SPEL+ 程式呼叫 Extension 中可實作的各種函式。
此外,下列為內建「外部函式」,於支援 Extension 的 RC+ 版本中皆可使用。
- 外部程式執行(等待結束並傳回輸出第一行)
ret = CallExternal("Execute program [arg(s)]", output$) - 外部程式啟動(不等待結束)
ret = CallExternal("ExecuteNoWait program [arg(s)]", output$) - 取得對應 CallExternal 結果碼的字串
ret = CallExternal("ErrorStr Str$(retCode)" output$)- 例
Int32 ret String output$ ret = CallExternal("ErrorStr 0", ByRef output$) Print output$- 於 Run 視窗中會輸出 Success。
- 例
(進階用戶適用)
此外,橋接 DLL 亦提供用於控制外部函式行為的函式。(同樣需要與 CallExternal 相同的 Declare 陳述式)
- GetTimeout(ByRef timeout As Int32) As Int32
- 取得 CallExternal 的逾時時間。單位為毫秒,預設值為 30,000。
- SetTimeout(timeout As Int32) As Int32
- 設定 CallExternal 的逾時時間。單位為毫秒。