Declare

用於叫用DLL(動態連結程式庫)所定義的外部函式。

格式
Declare 函式名稱, "DLL檔案路徑" , "DLL內函式名稱" [, (引數清單)] As函數型態

參數

函數名稱
指定從程式呼叫時的函數名稱。
DLL檔案路徑
以使用引號("")圍起的字串或#define定義的巨集指令指定函式庫的路徑和名稱。
未指定路徑時,RC+則搜尋目前專案目錄中的檔案。找不到時,則假定檔案位於Windows system32目錄中。可省略副檔名。若已省略,則假定為.DLL。
DLL內函數名稱
是選件參數。指定DLL中的實際函式名稱或函式指數。名稱被區分為大寫和小寫。以用引號(“”)圍起的字串指定函式名稱。若要使用指數,在指數前附加#。若已省略,則將以「函式名稱」參數指定的函式名稱用作DLL內函式名稱。
引數清單
是DLL引數的清單。請使用以下格式的引數。可省略。

[ {ByRef | ByVal}​ ] 變數名稱[( )] As變數類型

ByRef
參照要呼叫的函數變數時,指定ByRef。此時,可將函式內的引數變更反映於叫用側的變數中。可變更透過參照而傳遞的值。可省略。
ByVal
是預設值。以值(ByVal)傳遞參數。只傳遞數值,因此,函式返回時,不可更改該變數。在未用叫用的函式來變更變數值時進行指定。可省略。
變數名稱
是必須的參數。是表示引數的變數名稱。依變數命名時的規則進行命名。要將陣列變數用作引數時,請務必指定ByRef。
變數類型
是必須的參數。用於宣告引數型態。
函數類型
是必須的參數。請宣告函數型態。

說明
用於從目前的程式叫用DLL函式之情況。請在函式之外部分使用Declare。

Declare陳述式用於在編譯時確認存在DLL檔案和函式。

發生錯誤2473「與Epson RC+的連結功能失敗 (忙碌中或未初始化)」時的因應如下。

  • 請確認Epson RC+已連接到控制器。DLL函數在PC上執行。
  • 請確認使用WindowsStatus函數,可利用DLL叫用。

以ByVal傳遞數值變數

SPEL: Declare MyDLLFunc, "mystuff.dll", "MyDLLFunc", (a As Long) As Long
VC++ long _stdcall MyDllFunc(long a);

以ByVal傳遞字串變數

SPEL: Declare MyDLLFunc, "mystuff.dll", "MyDLLFunc", (a$ As String) As Long
VC++ long _stdcall MyDllFunc(char *a);

以ByRef傳遞數值變數

SPEL: Declare MyDLLFunc, "mystuff.dll", "MyDLLFunc", (ByRef a As Long) As Long
VC++ long _stdcall MyDllFunc(long *a);

以ByRef傳遞字串變數

SPEL: Declare MyDLLFunc, "mystuff.dll", "MyDLLFunc", (ByRef a$ As String) As Long
VC++ long _stdcall MyDllFunc(char *a);

以ByRef傳遞字串後,可在DLL中變更字串。字串最長可使用255個字元。請注意勿超過最大字元數。SPEL+為字串變數確保內部固定的255個字元區域。

以ByRef傳遞數值陣列

SPEL: Declare MyDLLFunc, "mystuff.dll", "MyDLLFunc", (ByRef a() As Long) As Long
VC++ long _stdcall MyDllFunc(long *a);

來自DLL函式的傳回值
DLL函式可以返回除字串以外的任何數據類型的傳回值。

如果需要傳回字串,請使用上面的"以ByRef傳遞字串變數",將字串變量作為參數。

如果傳回值是字串變數,則會發生錯誤 3614: “You cannot specify a String for Declare return data type.”。

變數類型
Epson RC+ 8.0與C/C++變數類型的對應如下表所示。

由於沒有與Epson RC+ 8.0對應的數據,因此不使用C/C++的byte類型或結構。

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

程式範例

Declare ReturnLong, "mystuff.dll", "ReturnLong", As Long

Function main

    Print "ReturnLong = ", ReturnLong
Fend

參照
Function...Fend

Declare範例

' 以Declare命令定義外部函式。
' 在DLL檔案路徑中未設定完整路徑時,可將DLL檔案置於目前專案資料夾、
' Windows System32資料夾中。

Declare MyDLLTest, "mystuff.dll", "MyDLLTest" As Long

Function main
    Print MyDLLTest
Fend

' ‘以Declare命令定義具有2個Integer型引數的外部函式。

 #define MYSTUFF "mystuff.dll"

Declare MyDLLCall, MYSTUFF, "MyTestFunc", (var1 As Integer, var2 As Integer) As Integer

' 以Declare命令指定外部函式的完整路徑,
' 以指數指定並定義函式。

Declare MyDLLTest, "c:\mydlls\mystuff.dll", "#1" As Long