調用動態連結程式庫中的原生函數
Epson RC+ 8.0可讓您調用動態連結程式庫(DLL)中的原生函數。
其係用於複雜的算術處理,並可調用外部裝置的原生函數。
若要調用原生DLL函數,請使用Declare聲明(此為SPEL+程式的函數定義命令),並依照正常方式撰寫函數調用。
有關詳細資訊,請參閲以下手冊。
「SPEL+ 語言參考 Declare」
調用原生DLL的範例
透過使用Microsoft Visual Studio 2019等開發工具,您可創建一個能從SPEL+調用的原生DLL。此處係以Visual Studio 2019為例,創建執行算術運算子的函數。
步驟1: 決定原生DLL的變數類型
您必須規劃在Epson RC+ 8.0中利用原生DLL進行轉換的資料類型。Epson RC+ 8.0資料類型與C/C++變數類型的對應表如下所示。您無法使用C/C++位元組類型及結構,因為Epson RC+ 8.0沒有提供對應的資料。
Epson RC+ 8.0與C/C++資料對應表
Epson RC+ 8.0 | C/C++ |
---|---|
Boolean | short |
Byte | short |
Short | short |
Integer | short |
Long | int |
Real | float |
Double | double |
String | char [256] *包含Null |
步驟2: 創建原生DLL
啟動Visual Studio 2019。
在[開始]中選擇「建立新的專案」。
會顯示[建立新專案]對話方塊。
在右邊的功能列表中選擇「Windows傳統式精靈」。
點擊[下一個]按鈕。
啟動Windows桌面嚮導。
在[專案名稱]中輸入專案名稱。(在此輸入「MyCalculator」。)
點擊[創建]按鈕。
勾選項目選項。
在[應用程式類型]中,選擇「動態連結程式庫 (.dll)」選項按鈕。
在[更多選項: ]中,勾選[匯出符號]方塊。
點擊[確定]按鈕。
接著會在MyCalculator.cpp中自動創建簡單的fnMyCalculator函數範例。將執行算術運算子的MyArithmetic函數添加至此檔案。
MYCALCULATOR_API float MyArithmetic(short value1, short value2, char * kind ) { if ( !strcmp(kind, "add") ) { return (float)(value1 + value2); } else if ( !strcmp(kind, "sub") ) { return (float)(value1 - value2); } else if ( !strcmp(kind, "mul") ) { return (float)(value1 * value2); } else if ( !strcmp(kind, "div") ) { return (float)(value1) / (float)(value2); } else { strcat_s(kind, 10, " NG"); return 0; } }
導出函數,以允許從SPEL+調用。
選擇Visual Studio 2019功能表 - [專案] - [添加新項]。此時會顯示[添加新項]對話方塊。
在對話方框左側的功能列表中選擇[Visual C++] - [Code]。
在中間的列表中選擇「Module-Definition File (.def)」。
在[Name: ]中,輸入檔案名稱。(此處將MyCalculator設為檔案名稱。)
點擊[Add]按鈕。
將「fnMyCalculator 函數」和「MyArithmetic 函數」註冊至已創建的「MyCalculator.def」檔案。
LIBRARY "MyCalculator" EXPORTS fnMyCalculator MyArithmetic
創建專案及DLL。選擇[Win32]作爲Visual Studio 2019的解決方案平臺。然後從Visual Studio 2019功能表選擇[創建] - [Build MyCalculator]。若不顯示任何錯誤,DLL則將成功創建。
提示
在Epson RC+ 8.0中,64位原生DLL不可用。此外,如果使用在Visual Studio 2015之前版本中創建的DLL時,必須事先安裝與該版本對應的運行時(runtime)。
步驟3: 從SPEL+調用DLL函數
提示
在從Epson RC+ 8.0調用函數之前,您必須先偵錯並徹底檢查,確保正常運作。若原生函數發生錯誤(例如系統錯誤),Epson RC+ 8.0將無法正常運作。
將創建的MyCalculator.dll複製到Epson RC+ 8.0專案資料夾(例如: C:\EpsonRC80\projects\dllcall`)。
定義在SPEL+程式中執行算術運算子的DLL函數,並在Function main中撰寫MyArithmetic的函數調用。
Declare MyArithmetic, "MyCalculator.dll"(value1 As Integer, value2 As Integer, ByRef calc$ As String) As Real Function main Real result; String calc$ calc$ = "add" result = MyArithmetic(1, 2, ByRef calc$); Print "1+2=", Str$(result) calc$ = "sub" result = MyArithmetic(1, 2, ByRef calc$); Print "1-2=", Str$(result) calc$ = "mul" result = MyArithmetic(1, 2, ByRef calc$); Print "1*2=", Str$(result) calc$ = "div" result = MyArithmetic(1, 2, ByRef calc$); Print "1/2=", Str$(result) Fend
創建並執行專案。此時會顯示以下結果。
1+2=3 1-2=-1 1*2=2 1/2=0.5
提示
在創建專案之前,務必將原生 DLL 成功複製到專案資料夾。若沒有成功,將會出現警告或錯誤。
如果使用第三方製作的DLL作爲原生DLL,請注意該DLL的依賴關係。如果依賴項的從屬DLL不在專案資料夾,或Windows環境變數PATH設置的資料夾中,則會發出警告或錯誤。
← 預先定義的常數 創建SPEL+ 應用程式 →