10.自己动手研究动态链接库和静态链接库的区别

在学习注入dll时候 一直不理解如何区分动态链接库和静态链接库
今天让我们自己写程序将它理解清楚
首先我们打开vs
创建一个动态链接库文件
下面就是创建完文件之后 生成的代码
我们在动态链接库的入口处写入自己的函数

自己动手写一个dll导出函数

#include "pch.h"
// _declspec(dllexport) 声明导出函数将该函数从该dll开放提供给其他函数使用
 extern "C" _declspec(dllexport) void ccc();
void ccc() {
    MessageBox(NULL,"导出函数被调用成功","信息:",MB_YESNO);
}
//api信息框 来查看是否调用成功
     //动态链接库的入口函数
BOOL APIENTRY DllMain( HMODULE hModule,           //DLL模块的句柄
                       DWORD  ul_reason_for_call, //DLL被调用的原因 
                       LPVOID lpReserved          //保留项也是Windows的保留参数
                     )                         //保留参数不是不使用的参数,而是Windows不想让我们知道
                                             //作用的参数
{
    switch (ul_reason_for_call)
    { 
    case DLL_PROCESS_ATTACH:      //当进程加载时 DLL被调用
    case DLL_THREAD_ATTACH:         // 有线程被创建时DLL被调用
    case DLL_THREAD_DETACH:          //有线程结束时DLL被调用
    case DLL_PROCESS_DETACH:         //当DLL被进程卸载时DLL被调用
        break;
    }
    return TRUE;
}

extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这
部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的
参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不
会带上函数的参数类型,一般只包括函数名。
这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值