调用动态链接库中的基本函数
Epson RC+ 8.0允许您调用动态链接库(DLL)中的基本函数。
这是用于复杂的运算处理并调用外部设备的基本函数。
若要调用本机DLL函数,使用Declare语句(这是SPEL+程序中的一个函数定义命令),并且将函数调用写作常规。
有关详细信息,请参阅以下手册。
《SPEL+语言参考 - Declare》
调用本机DLL的样本
通过开发工具如Microsoft Visual Studio 2019,您可以创建一个可从SPEL+中调用的本机DLL。在这里,它使用Visual Studio 2019作为样本来创建一个函数,执行运算符。
第1步:决定本机DLL的变量类型
您需要决定数据类型以使用本机DLL和Epson RC+ 8.0进行传输。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++] - [代码] 。
在中间的模块列表中选择“模块定义文件 (.def)”。
在[名称:]中输入文件名。(此处将“MyCalculator.def” 设为文件名。)
单击[添加(A)]按钮。
将“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 "12=", Str$(result) calc$ = "div" result = MyArithmetic(1, 2, ByRef calc$); Print "1/2=", Str$(result) Fend
创建和执行该项目。将显示以下结果。
1+2=3 1-2=-1 12=2 1/2=0.5
要点
创建该项目之前,一定要正确无误地将本机DLL复制到项目文件夹中。如果失败,将出现警告或错误。
当使用第三方DLL作为本机DLL时,请注意该DLL的依赖关系。如果作为依赖项的DLL程序不在项目文件夹,或Windows环境变量PATH设定的文件夹中时,则会发生警告或报错。
← 常量 创建SPEL+应用程序 →