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檔案和函式。
以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
← Date$函數 DegToRad函數 →