C++封装DLL易语言调用,实现功能菜单

学习C++也半年了,昨天突然想到能不能用C++写的DLL给易语言调用,突然冒出了这个想法后来学习了半天,终于实现了。
先放上效果图一览,这篇文章适合刚入门dll调用的萌新(不是小白 ),结尾会分享dll和全部源代码,

下个阶段我还会更新CS透视自瞄的dll和dll里面全部代码的注释希望可以帮到大家。

C++封装DLL具体流程我这里用的是大众的方法。
第一步:先创建一个dll动态库—>添加自己要写的函数的头文件和cpp文件,

接下来要注意的是:要给易语言调用C++写的动态dll,需要在C++声明的函数之前加上"_stdcall ",注意前面有个下划线
要导出在dll里的函数前缀加上extern “C” __declspec(dllexport)

以我自己的代码为例子,我建立了fir.h和fir.cpp,
在fir.h里面

#pragma once//防止编译多次
#include<Windows.h>//读写内存函数的头文件
extern "C" __declspec(dllexport) int _stdcall  obj();//获取窗口句柄
 
extern "C" __declspec(dllexport) int _stdcall  gethpro();//获取进程句柄
 
extern "C" __declspec(dllexport) void _stdcall  upup(int sum);//修改阳光
 
extern "C" __declspec(dllexport) void _stdcall update();//无冷却实现

在fir.cpp中

#include"fir.h"
#include"stdafx.h"
#include<stdlib.h>
#include <tchar.h>
 
constexpr auto BaseAddr = 0x006A9EC0; //这个是游戏的基址
 
extern "C" __declspec(dllexport) int _stdcall  obj()//获取窗口句柄
{
        HWND hwnd = ::FindWindow(NULL, _T("植物大战僵尸中文版"));
        return (int)hwnd;
}
 
extern "C" __declspec(dllexport) int _stdcall gethpro()//获取进程句柄
{
        HWND hwmd1 = ::FindWindow(NULL, _T("植物大战僵尸中文版"));
        DWORD dwpid;
        GetWindowThreadProcessId(hwmd1, &dwpid); //进程pid保存在这个变量dwpid中
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwpid);
        if (hProcess <=0)
        {
                MessageBox(NULL, TEXT("获取句柄出错"),
                        TEXT("读取失败"), MB_YESNO | MB_ICONQUESTION);
                exit(1);
        }
 
        return (int)hProcess;
}
 
extern "C" __declspec(dllexport) void _stdcall upup(int sum)//更新阳光
{
        HANDLE hProcess = (HANDLE)gethpro();
        DWORD d = sum;
        int Addr=0;       //临时保存的地址
        ReadProcessMemory(hProcess, (LPCVOID)(BaseAddr), &Addr, 4, 0);
        ReadProcessMemory(hProcess, (LPCVOID)(Addr + 0x768), &Addr, 4, 0);
        WriteProcessMemory(hProcess, (LPVOID)(Addr + 0x5560), &d, 4, 0);
 
}
 
extern "C" __declspec(dllexport) void _stdcall update()//所有方框无冷却
{
        HANDLE hProcess = (HANDLE)gethpro();
        int value = 1;//设置值为1方框就无冷却
        int Addr=0;  //临时保存的地址
        ReadProcessMemory(hProcess, (LPVOID)(BaseAddr), &Addr, 4, 0);
        ReadProcessMemory(hProcess, (LPVOID)(Addr + 0x768), &Addr, 4, 0);
        ReadProcessMemory(hProcess, (LPCVOID)(Addr + 0x144), &Addr, 4, 0);
 
        for (int i = 0; i < 10; i++)//利用循环每次加50,循环10次实现10个方框无冷却
        {
                WriteProcessMemory(hProcess,
                        (LPVOID)(Addr + 0x70 + (0x50)*i), &value, 4, 0);
        }
}

第二部:然后生成dll,接下来把dll从debug目录里拷贝出来,随便拷贝到一个路径。

第三步:打开易语言,插入dll命令,接下来的自己百度就好啦。易语言调用dll挺简单的。

给大家分享一个dll函数查看器,因为dll生成之后,里面的函数名,跟你在C++里面写的名字有一定差异,。dll查看器我也会一并打包上传。

就比如我在上面写的update是无冷却函数,在dll里面函数名却是"_update@4 ",所以这里要注意,不然你用易语言调用他会显示找不到这个命令的

易语言我的源码也基本全写了注释方便大家观看,大家有更好的菜单也可以自己弄,这里只是举个简单的全局热键菜单的例子。

源码百度网盘: https://pan.baidu.com/s/1JwrtoViSEb8amtRn5zJmCg 提取码: npfi

一个是安装包版一个是绿色版的,绿色版有的系统可能无法打开,就可以用安装版的了
植物大战僵尸游戏本体网盘链接: https://pan.baidu.com/s/1EZMdAZVtSdrXK2_avVlSUQ 提取码: p7du

祝大家学习顺利!

在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iTunesMobileDevice.dll 是苹果公司提供的一个动态链接库,用于管理 iOS 设备与计算机之间的通信,其中包括设备备份、文件传输、应用程序安装等功能。在易语言调用 iTunesMobileDevice.dll 可以实现与 iOS 设备的交互,例如读取设备信息、备份数据等。 以下是一个简单的示例代码,演示如何在易语言调用 iTunesMobileDevice.dll: ```vb ' 加载 iTunesMobileDevice.dll Declare Function AMDeviceNotificationSubscribe Lib "iTunesMobileDevice.dll" _ (ByVal callback As Long, ByVal unused1 As Long, ByVal unused2 As Long, _ ByRef notification As Long) As Long ' 定义回调函数 Function AMDeviceNotificationCallback(ByVal ptr As Long, ByVal arg As Long) As Long ' 处理设备连接事件 End Function ' 订阅设备连接通知 Dim notification As Long AMDeviceNotificationSubscribe(AddressOf AMDeviceNotificationCallback, 0, 0, notification) ' 处理设备连接事件的回调函数 Function AMDeviceNotificationCallback(ByVal ptr As Long, ByVal arg As Long) As Long ' 处理设备连接事件 End Function ``` 需要注意的是,由于 iTunesMobileDevice.dll 是一个 C 语言编写的动态链接库,其函数参数和返回值都是原始类型,需要按照 C 语言的规则进行声明和调用。在以上示例代码中,使用 Declare 关键字声明了函数原型,并使用 AddressOf 关键字将回调函数的地址传递给 AMDeviceNotificationSubscribe 函数。在回调函数中,需要按照 C 语言的规则进行参数解析和返回值处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值