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