易语言调用c 自定义数据类型,用__stdcall实现易语言调用C/C++的dll
用__stdcall实现易语言调用C/C++的dll
0x0 前言
大家好啊!我是逆向区的版主,今天我到编程区的来水帖子了!
有些朋友问我,易语言的功能好少啊,我好多想法都没法实现,我想能不能用易语言调用c的dll呢?
答:可以!!!
0x1准备工作--工程
首先我们需要一个VS,VS下载和安装想必大家都知道的。
我们打开之后新建个项目,或者(Ctrl+shift+n)
出来个这个界面
我们是写的C++,所以左边点C++,然后是dll,选择MFC dll
名字大家随便填啊,完成之后确定
稍等片刻会出现这个界面。
此时我们需要注意下
不要点完成,而是点下一步!!
这边选择带静态的规则
为什么不选默认的第一个呢?这是因为由于操作系统不同,系统关键函数dll也不相同,
为了防止在其他系统虽然有dll文件但找不到函数的问题
这里使用第二个静态规则,然后点完成。
0x3 准备工作--->cpp文件
如图
点击左下角的解决方案管理器,展开所有文件,找到源文件中的cpp,打开。
代码如下
// dllll.cpp : 定义 DLL 的初始化例程。
//
#include "stdafx.h"
#include "dllll.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
// 则从此 DLL 导出的任何调入
// MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
// 该函数的最前面。
//
// 例如:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
//
// 此宏先于任何 MFC 调用
// 出现在每个函数中十分重要。这意味着
// 它必须作为函数中的第一个语句
// 出现,甚至先于所有对象变量声明,
// 这是因为它们的构造函数可能生成 MFC
// DLL 调用。
//
// 有关其他详细信息,
// 请参阅 MFC 技术说明 33 和 58。
//
// CdllllApp
BEGIN_MESSAGE_MAP(CdllllApp, CWinApp)
END_MESSAGE_MAP()
// CdllllApp 构造
CdllllApp::CdllllApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CdllllApp 对象
CdllllApp theApp;
// CdllllApp 初始化
BOOL CdllllApp::InitInstance()
{
CWinApp::InitInstance();
return TRUE;
}
[color=rgb(51, 102, 153) !important]复制代码
我们整理下,是这样的:
#include "stdafx.h"
#include "dllll.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
BEGIN_MESSAGE_MAP(CdllllApp, CWinApp)
END_MESSAGE_MAP()
CdllllApp::CdllllApp(){}
CdllllApp theApp;
BOOL CdllllApp::InitInstance(){CWinApp::InitInstance();return TRUE;}
[color=rgb(51, 102, 153) !important]复制代码
大家注意下代码里面的CxxxxxxxxxxxxApp;xxxxxxxxxxxxxx会随着你的工程文件名更改而更改,一般创建好了都有自带代码的,不用删,把注释整理(或删除)就行。!
0x4 开干--->写几个测试函数
我们用加法和减法函数,大家也可以用其他函数试试!(可能要加头文件)
我们在刚才的整理后的代码加上这些代码:
int __stdcall newadd(int a,int b){
return (a+b);}
int __stdcall newsub(int a,int b){
return (a-b);}
[color=rgb(51, 102, 153) !important]复制代码
此时就写完了主要代码了
接下来函数写完了
我们来写def定义文件(左边的解决方案管理器里面双击)
原来的默认代码是这样的:
; dllll.def : 声明 DLL 的模块参数。
LIBRARY
EXPORTS
; 此处可以是显式导出
[color=rgb(51, 102, 153) !important]复制代码
我们改成我们的:
; dllll.def : 声明 DLL 的模块参数。
LIBRARY "dllll"
EXPORTS
newadd
newsub
[color=rgb(51, 102, 153) !important]复制代码
其中LIBRARY "xxxxxxxxxxxx"中的xxxxxx写这个工程的名字,(就是def文件的名字,这里是dllll)EXPORTS下面一行就是你要保留函数名的函数,这里看cpp的代码就是newadd和newsub
可以依次叠加。
完事之后编译就行
重新生成(Ctrl+Alt+F7)
等待生成完毕我们去工程文件的目录(一开始创建的窗口注意下位置):
把这个dll复制出来。
0x4 调用
打开易语言,我们画两个编辑框,两个按钮
代码如下,dll声明:
.版本 2
.DLL命令 DLL命令1, 短整数型, "dllll.dll", "newadd"
.参数 a, 短整数型
.参数 b, 短整数型
.DLL命令 DLL命令2, 短整数型, "dllll.dll", "newsub"
.参数 a, 短整数型
.参数 b, 短整数型
[color=rgb(51, 102, 153) !important]复制代码
其中的dll命令名大家随便写,这个是在易语言显示的名字
库文件名就写刚才那个dll的名字,因为放同一个目录,这里就不写目录路径了,大家需要的自己补
在库中对应名看刚才的def文件,对应好了,多一个或者少一个字符都无效的。
然后c的int型对应的是短整数型,这里大家看下。
然后是程序集:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
信息框 (到文本 (DLL命令1 (到数值 (编辑框1.内容), 到数值 (编辑框2.内容))), 0, , )
.子程序 _按钮2_被单击
信息框 (到文本 (DLL命令2 (到数值 (编辑框1.内容), 到数值 (编辑框2.内容))), 0, , )
[color=rgb(51, 102, 153) !important]复制代码
好了我们静态编译(Shift+F7)。
测试下:
完美!!
附件如下:
https://www.lanzous.com/i4yml7i
易语言调用c 自定义数据类型,用__stdcall实现易语言调用C/C++的dll相关推荐
- 易语言调用c 自定义数据类型,跟我入门易语言 14 自定义数据类型
自定义数据类型是一种特殊的数据类型,它与我们之前学习过的常见数据类型不同,我们自己也可以自己创建数据类型!一个自定义类型可以由许多成员组成,每一个成员可以是各种常见数据类型,甚至一个自定义数据类型中还 ...
- 结构体定义小的放前面_编程C语言进阶篇——自定义数据类型:结构体
一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...
- 博途数据类型wstring怎么用_博图V14关于自定义数据类型的疑问,大家都是怎么编程写中间标签的那。...
由于单位最近要搞标准化编程.我负责编写程序块.用AB写程序的套路编写西门子博图V14的块. 1,建立自定义数据类型. 2,编写要调用的程序块.如果设备不多建议用FB生成背景数据库,又能保持定时器以及各 ...
- 【C语言三种自定义类型】
目录 前言 一.结构体(struct) (一)结构体的声明 1.结构的声明 2.特殊的声明(不完全声明) 3.结构体的自引用 4.结构体的初始化与赋值 5.结构体内存对齐 内存对齐规则: 6.修改默认 ...
- 【剑仙教程】易语言的结构体。自定义数据类型。
1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...
- 易语言 取自定义数据类型的大小
先说一下易语言的变量储存机制 易语言有基本数据类型和复合数据类型两种 基本数据类型包括:1. 各种整数 2.各种浮点 3. 逻辑值 他们都是储存在栈上的 大小都是固定的 用不着取 复合类型一般储存在堆 ...
- 剑仙java_【剑仙教程】易语言的结构体。自定义数据类型。
1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...
- 易语言数据类型与c 对照,易语言利用自定义数据类型和数组. 制作键对值操作类/内存配置...
易语言利用自定义数据类型和数组. 制作键对值操作类/内存配置.版本 2 .支持库 spec .子程序 _临时子程序 .局部变量 test, classKeyValue .局部变量 局_取值方法2, ...
- 易语言自定义数据类型转c,一步一步跟我学易语言之自定义数据类型
自定义数据类型 什么是"自定义数据类型"?顾名思义,就是用户可以随时在程序中自行定义新的数据类型.自定义数据类型时需要设置数据类型的名称及其成员.数据类型成员各属性的设置方法等同于 ...
最新文章
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别
- 使用openstack构建私有云计算平台
- 小程序菜单栏吸顶效果
- 15条最重要且最基本的SEO优化Tips和技巧
- kettle数据源连接的集群设置
- 短语密码_使用密码短语以提高安全性
- 如何计算iPhone和Apple Watch上的步数
- MySQL-03:数据表操作基本命令笔记
- event.keyCode列表
- Dubbo面试 - dubbo的工作原理
- RabbitMQ(三) HelloWorld 单生产者单消费者示例实现
- 资源放送丨《Oracle RAC 集群安装部署》PPT视频
- 保护REST API / Web服务的最佳实践[关闭]
- vant:修改van-nav-bar__title颜色——vant中nav-bar组件标题颜色
- Word文字怎么居中对齐
- android微信连wifi设置,微信小程序实现连接wifi功能的方法
- HC-05蓝牙模块简易说明
- 关闭tslint检测的简单方法
- 什么是爱情——碧海青天BBS
- HtmlCss光标(插入符caret)透明隐藏光标 221106笔记
热门文章
- css html5 css3
- sharpjs中文文档,sharpjs中文网
- 测试版ios15怎么信任软件,ios15的信任文件在哪?ios15信任授权在哪里设置?
- 树叶叶脉的提取及描述
- ubuntu20.04如何录制屏幕
- html往WPS粘贴格式乱,wps表格无法粘贴信息,原因是复制区域形状不同怎么解决?...
- 走弯路,才是人生的常态
- 基于java体育竞赛成绩管理系统(Java毕业设计)
- oracle存储过程中游标定义
- BurpSuite IP代理扩展(IPRotate_Burp_Extension)每次请求切换IP