动态链接库(codeblocks)

动态链接库

动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式
函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分

在codeblocks环境下创建动态链接库

新建->项目->Dynamic Link library
会自动生成main.cpp和main.h两个文件

main.h如下

#ifndef __MAIN_H__
#define __MAIN_H__

#include <windows.h>

/*  To use this exported function of dll, include this header
 *  in your project.
 */

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif


#ifdef __cplusplus
extern "C"
{
#endif

void DLL_EXPORT SomeFunction(const LPCSTR sometext);

#ifdef __cplusplus
}
#endif

#endif // __MAIN_H__

其中

void DLL_EXPORT SomeFunction(const LPCSTR sometext);

是我们所要更改的内容,将它替换成我们所需要的类声明或者方法声明(注意:保留DLL_EXPORT,这是上面定义的宏,用来导出函数)

main.cpp如下:

#include "main.h"

// a sample exported function
void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{
    MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION);
}

extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
            break;

        case DLL_PROCESS_DETACH:
            // detach from process
            break;

        case DLL_THREAD_ATTACH:
            // attach to thread
            break;

        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}

同理

void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{
    MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION);
}

这段代码是我们需要自定义的内容,用来定义在.h文件中所声明的方法(同样DLL_EXPORT不可去掉)

将其编译后,会在相应的文件夹中找到libTest_DLL.a 和 Test_DLL.dll文件

当我们项目需要引用这个库中的文件的时候,我们将dll文件放在我们自建的项目中,同exe文件放在一起,并在项目中添加同上相同的.h文件。并且右键单击项目名选择构建选项(bulid opention s)
在这里插入图片描述
点击连接器设置。点击添加,找到刚才生成的.a(有的是.lib)文件点击确定。此时在项目中只需引用方才创建的头文件.h文件即可使用dll

注意:

上述都是用c++语言,必须使用extern "c"连接c语言标准,自动生成的代码中已经给出
并且注意 dllimport与dllexport作用与区别

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值