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函数可以返回除了字符串(String型)以外的任何数据类型。
如需返回字符串,请参考上述“以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文件路径未设置全路径,可以在当前项目文件夹。
' 和Windows System32文件夹中存放DLL文件。
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函数 →