2024.7.16生产实习日志

一、参数分离

二、动态调用

1.C++动态调用动态链接库(DLL或SO)主要步骤:

2.创建动态库:

3.加载动态库:

4.函数类型定义:

5.获取函数地址:

6.调用函数:

7.卸载动态库:

三、完全动态调用

完全动态调用和动态调用的区别

四、CS屏幕截图,键盘监控,文件获取

监听日志

获取文件

获取屏幕截图


一、参数分离

随着程序越来越复杂,为了保证程序的可维护性和易读性,将程序不同功能的代码放在不同的文件中

是一个很好的方式,为了允许编写程序时,将代码按照逻辑关系保存到不同文件中,C++支持了分离式编

译。

       从代码层面来讲,为了更方便的实现分离式编译,一般会将函数/变量的声明和定义分离开。

       其中函数/变量的声明放在.h头文件中,函数/变量的定义放在.cc文件中,如果要跨文件使用函数/变量,

引用头文件即可,例如:函数fun的定义位于 define.cc文件,fun的声明位于define.h头文件,在test文件要

使用fun函数,只需#include "defind.h" 。

       将声明保存于.h文件的好处是,所有要用到fun的文件都只需要引用.h文件即可,避免了多次引用,如果

函数发生了修改,修改对应函数声明时,仅需修改.h文件里对应的这一个地方就可以,这里.h文件类似于统一

的接口要注意的是,声明可以有多次,而定义则不可重复定义,否则会有报错 

二、动态调用

1.C++动态调用动态链接库(DLL或SO)主要步骤:

动态库调用流程大致可以描述为:0.创建动态库 -> 1.加载动态库 -> 2.定义函数类型 -> 3.获取函数地址 -> 4.调用函数 -> 5.卸载动态库。

这个流程和逻辑可以在不同的操作系统和编译器下略有差异,因此需要根据特定的平台和工具链做适当的调整

2.创建动态库:

创建一个接口,并生成可供其他程序使用的DLL和SO(动态链接库)

3.加载动态库:

使用操作系统提供的函数(如LoadLibrary()dlopen())加载动态库文件。需要指定动态库的文件路径或名称

4.函数类型定义:

使用函数指针来定义函数的类型,以便在动态库中找到的函数能够正确地调用。函数指针的类型必须与函数的签名(参数类型和返回类型)匹配。

5.获取函数地址:

通过使用操作系统提供的函数(如GetProcAddress()dlsym())获取特定函数的地址。需要指定要调用的函数的名称

6.调用函数:

通过调用函数指针,实现对动态库中函数的调用。根据函数的参数类型和返回类型,在适当的位置传递参数,并根据需要处理返回值

7.卸载动态库:

使用操作系统提供的函数(如FreeLibrary()dlclose())卸载已加载的动态库。通常在不再需要动态库时执行这个步骤

三、完全动态调用

完全动态调用和动态调用的区别

如下: 加载方式:显式调用需要应用程序手动加载动态库,而隐式调用则是在编译和链接时自动加载动态库。 控制权:显式调用需要应用程序自己控制动态库的加载和卸载,而隐式调用由操作系统自动管理。 灵活性:显式调用比较灵活,可以根据应用程序的需要动态加载和卸载动态库,而隐式调用则比较固定,只能在编译和链接时确定使用的动态库

四、CS屏幕截图,键盘监控,文件获取

监听日志

获取文件

获取屏幕截图

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值