易语言适合用于数据展示,数据的获取还是VC来的快、方便哈。
因此我一般使用VC编写DLL,使用易语言编写界面,同一个程序,DLL和EXE通讯最方便的就是使用接口回调了。
废话少说,进入主题。
---------------------------------------------------------------------------------------------
1. VC编写DLL
为了DLL能够调用EXE中的函数,我们先声明回调函数原型:
声明好了回调函数原型,我们需要知道EXE中函数的地址,因此需要在DLL中提供个接口给EXE调用,让EXE把函数地址传给DLL:
为了方便测试,我在DLL中提供了一个手动调用EXE函数的接口:
好了,DLL部分编写完成。
----------------------------------------------------------------------------------------------------
2. 易语言EXE程序编写
(1) 在DLL命令中声明我们在DLL中编写的接口
.版本 2
.DLL命令 SetCallback, 逻辑型, "dlltest.dll", "SetCallback"
.参数 pfn, 子程序指针
.DLL命令 StartCallback, , "dlltest.dll", "StartCallback"
为了方便数据拷贝,我们还需要导入kernel32.dll的一个API接口: RtlMoveMemory
.版本 2
.DLL命令 RtlMoveMemory, , "kernel32", "RtlMoveMemory"
.参数 目标数据地址, 整数型
.参数 源数据, 整数型
.参数 尺寸, 整数型
到这里,准备工作已经做好了,在EXE中声明一个子程序:
当然为了和DLL中的数据类型保持一致,我们得在EXE中自定义一个数据类型:
.版本 2
.数据类型 Data
.成员 pszData, 整数型
.成员 iDataLen, 整数型
在EXE程序启动时,我们设置回调,把子程序的地址传给DLL:
SetCallback (&DLL回调_子程序)
给EXE加个按钮,让DLL调用子程序:
StartCallback ()
程序界面如下:
点按钮,启动回调,效果如下:
* “进入 -----------------------> DLL回调_子程序”
* “iData=1635536”
* “数据长度:12”
* “数据内容:abc123哈哈xx”