IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ MFC调用易语言模块 -> 正文阅读

[C++知识库]C++ MFC调用易语言模块

? ? 易语言有很多现成的模块,我们都知道学编程祖师爷有个祖训:不要重复发明轮子。虽然我们当然应该不断学习扩展知识的边界,但也不能啥都自己亲力亲为,不能为了做个西红柿炒鸡蛋就自己从晒盐开始做起。

? ? 易语言其实没有自己的链接器,也就是把代码编译成二进制的可执行文件。易语言用的是VB或者VC++的链接器,所以可以在易语言里把模块内的函数也就是易语言称之为“子程序”的编译成DLL来给其他语言调用。

? ? 首先先给易语言装一个“黑月编译器”,如图:

去随便搜一个来装起来就行,最好用手工安装包,自动安装包有时候会装不上,不知道咋回事。

把手工安装包里的4个文件夹的文件复制到易语言安装目录后选择:

工具→支持库配置

在“查找”框内输入:hy

把黑月编译器前面的勾选上。就可以在“编译”菜单内看到黑月的编译选项了。

还可以在“工具”菜单栏下看到黑月编译器的设置选项。

鄙人是用“黑月应用程序向导”来创建的DLL工程,用易语言自己的DLL工程创建项目鄙人就没试过了。?

点击“黑月应用程序向导”

点击“下一步”

?

然后选择Windows DLL程序,再选择“完成”。

然后把以下几处默认添加的消息框函数删除:

?然后就可以在它这个名为Hello的默认子程序下写自己的代码。

引入模块,这里用常见的超级模块举例。

这里用 取进程ID 来测试,此函数会根据参数也就是进程名返回进程的PID。例如:

?用这个小工具“排版助手”为例,这就是它的进程名。

调用模块内的子程序后返回它的值,这样就可以在C++中接收这个值,这样就能调用易语言模块内的函数了,现在静态编译这个DLL。

记住要选择黑月编译器的静态编译功能,编译后DLL名为:virus.dll。

然后就能得到一个DLL,下面到MFC中去调用这个DLL。

新建一个MFC对话框工程,把编译出来的DLL放到MFC编译出来的exe程序同一个目录。

LPCSTR maki;
std::string rned;

HINSTANCE hModule = LoadLibrary("virus.dll");//打开DLL

typedef int(_stdcall *lpGetProcId)(LPCSTR a);//定义函数指针

lpGetProcId dec_fp = (lpGetProcId)GetProcAddress(hModule, "Merge"); 
//Merge是DLL中的函数名,已经被导出

int kk=dec_fp("gidot typesetter.exe");//排版助手的进程名

rned ="PID:"+std::to_string(kk)+"\n"; //int转换为string类型

maki=rned.c_str();//string转LPCSTR
	

WriteConsole(hdlWrite, maki, CString(maki).GetLength(), NULL, NULL); 
//向DOS窗口里输出字符串

这里最关键的是调用约定,编译出来的DLL是用?_stdcall?调用规则,不显式的标明会出现调用无参数的函数没问题,一旦需要传参进去,特别是数学类型参数比如Int型 float型参数的时候调用可以成功,但稍后程序就会崩溃,估计崩溃原因是堆栈不平衡,所以一定要显式标明调用约定。

其次则是易语言不支持宽字符,需要把项目的字符改成“多字节集”。

然后易语言的整数型对应C语言的Int类型 长整数型作为返回值对应unsigned long类型,做为参数对应UINT64,然后是比较麻烦的字符类型对应LPCSTR类型,因为这个字符串类型鄙人忙活了一天,实在是比较坑。

估计很多看官和鄙人一样既然都学了C++也就不会去用易语言,所以手头上也没有易语言,而且这玩意整天报毒用的人是提心吊胆,这里推荐没有易语言的各位去某宝买一个××版,也就3块钱,然后装个虚拟机,虚拟机装个WIN7就行,这玩意编译出来的DLL拿杀毒软件查还是不报毒的,至于××版易语言本身有没有毒那就天知道了。

这个精益模块打包前最好弄个易语言的对话框程序弄个按钮控件调用一下,精益模块需要注册,它会生成一个注册表项,第一次使用会弹出一个窗口,可以免费使用,但是要获取免费授权,如果不注册直接打包成DLL会如何鄙人不清楚,所以推荐照着测试的看官先弄个易语言窗口程序先调用一次精益模块内的函数,让模块注册,再打包成DLL用C++调用。

最后鄙人会把示例中用到的模块 易语言示例工程和MFC示例工程一同打包上传,供看官参考。

参考资料:

条条大路通罗马-在C/C++里调用易语言的模块

C++调用易语言DLL

本文例子:C++MFC调用易语言模块例子-其他文档类资源-CSDN下载

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:22:06  更:2022-07-05 23:23:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:20:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码