mleaf的博客

隔窗遥望醉花雨

使用易语言调用C/C++编写的DLL动态库


公众号原文连接:WiFi物联网

linux玩腻了,最近闲来无事想做一个windows软件玩玩,鉴于高中时期了解到中文编程语言《易语言》,话说易语言易学,简单,故花了5分钟重新看了看易语言写法,楼主秉持着,能先动手绝不bb的优良传统,直接上手写,不懂的东西再百度,事实证明《易语言》真的简单、易学、易懂,至于为啥不用C#我保存沉默。

如果有很多功能用易语言不方便实现我们怎么办呢?又或者易语言的很多操作我们还不会又怎么办呢?那就用C/C++写个动态库供易语言调用呗,用熟悉的语言解决问题。

工欲善其事,必先利其器,对于windows编程楼主是个新手,鉴于“Visual Studio”过于庞大,楼主找到了一个轻量级的“Dev-C++”看百度介绍就知道它很轻量级:“Dev-C++是一个Windows环境下的一个适合于初学者使用的轻量级 C/C++ 集成开发环境(IDE)”。而且还开源,可谓是非常良心了,确实很适合新手使用,给你们感受一下整体界面。


接下来我们就可以开始新建一个DLL项目了:文件->新建->项目->DLL。


选择好保存位置后,“Dev-C++”会默认生成一个dll工程模板,如下图所示,直接按CTRL+S保存“dllmain.cpp”和“dll.h”两个文件。


删掉默认的HelloWorld,我们自己来写一个简单的做加法的函数。注意:易语言要调用C/C++的动态库需要使用“__stdcall”关键字修饰函数。

DLLIMPORT int __stdcall add(int a, int b)

{

return a+b;

}


为防止编译的DLL动态库导出的函数名改变,我们还需要修改“dll.h”中DLLIMPORT宏定义,在“__declspec”之前加上“extern "C"”。

修改前:


修改后:


接下来我们就可以编译了,按“F12”全部编译,如果没有报错就会生成“test_dll.dll”。


好了我们可以使用易语言开始调用刚刚写好的函数了,先建立一个窗口程序:程序->新建->windows窗口程序->确定。


界面设计,添加两个编辑框,和一个按钮。


鼠标双击求和按钮,会自动跳转到窗口程序集。触发条件是“_按钮1_被单击”,我们在这里实现dll调用显示调用结果。


将“test_dll.dll”库拷贝到易语言工程目录下,点击菜单栏上的“插入->DLL命令”,添加上dll的库文件名及在库中对应命令名,参数要和C/C++中定义的一样,比如这里我们将a和b参数都定义为“整数型,返回参数为“整数型”。



我们回到“窗口程序集”,对我们刚刚添加的dll调用函数进行调用,下面是实现方法,首先将编辑框的内容转换为整数,即可调用“add”函数。


点击“运行”按钮即可弹出窗口程序,我们在编辑框中填入数字,点击求和,额。。。。。翻车了????



我们再看看“Dev-C++”中的源码有没有问题,无论怎么看都没发现任何错误,定睛一看编译器选成了“TDM-GCC 4.9.2 64-bit Release”因为“易语言”默认创建的32位程序,我们只需要将“TDM-GCC 4.9.2 64-bit Release”改为“TDM-GCC 4.9.2 32-bit Release”即可。



按“F12”重新编译文件,拷贝新编译的dll文件,到易语言工程目录再次执行,输入求和的数据,点击求和按钮,即可在调试窗口看到结果。


我们再加个信息框,来个弹窗显示,更加清晰。


最后啰嗦几句,可能有人会问易语言学了有啥用,其实我也不知道,学着玩呗,不过易语言在外挂界还是负有盛名的,其实国内用易语言的爱好者蛮多的。

有任何问题欢迎大家关注:微信公众号: “WiFi物联网” 加群讨论,未经作者允许禁止转载。

打赏

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.5.2 Zero

Copyright www.mleaf.org Reserved.