第五天2017/04/06(下午2:动态链接库(DLL))

创建动态库:
    新建一个DLLVS工程,选择“空项目”,此时会进入到新建的项目工程中;
    在项目工程中添加.h、.c、.cpp文件,并且填写代码;
    编译运行,在Debug下生成.dll和.lib文件,此时创建成功。
【注解】在创建动态库过程中,用到很多语法,比如:CC++的混合
    编程#ifdef __cplusplus extern "C"{#endif //函数的声明 #ifdef __cplusplus }#endif   、
    导出DLL函数关键字__declspec (dllexport) + 函数的声明与实现、
    #ifdef...#else...#endif(#ifdef __cplusplus...#else...#endif)  、 
    防止重定义头文件#ifndef...#define...#endif#define 

=====================================================================

使用动态库:
    新建一个使用动态库的项目,把上面生成的.dll和.lib文件以及.h文件拷贝到当前工程目录下;
    在项目中新建main.c或者main.cpp,并加上调用的代码,编译运行,此时动态库被使用。
【注解】在使用动态库过程中,用到很多语法,比如:链接器的附加依赖项#pragma comment(lib,"DLL.lib")
【下面有两个创建和使用动态库的示例】
1:
【功能介绍】
创建动态库:
    ①在头文件中声明两个函数
    ②一个在.c文件中实现,另一个在.cpp文件中实现
使用动态库:
    在main.c和main.cpp使用上面生成的动态库中的两个函数
(1)创建动态库
//DLL.h头文件声明2个函数
#ifndef DLL_H  
#define DLL_H 

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

#ifdef __cplusplus
#include <iostream>
using namespace std;
extern "C"   
{
#endif

    PORT_DLL int add(int a, int b);   
    PORT_DLL void  show();  

#ifdef __cplusplus
};
#endif

#endif  // DLL1_H  
------------------------------
//define_add.cpp
#define BUILD_DLL

#include "DLL.h"  

PORT_DLL int add(int a,int b)  
{  
#ifdef __cplusplus
    printf("DLL生成使用成功:add()函数 —— C++编译环境\n");
    return a+b; 
#else
    printf("DLL生成使用成功:add()函数 —— C编译环境\n");
    return a+b; 
#endif
}  
------------------------------
//define_show.c
#define BUILD_DLL

#include "DLL.h"

PORT_DLL void  show()
{
#ifdef __cplusplus
    printf("\nDLL生成使用成功:show()函数 —— C++编译环境\n");
#else
    printf("\nDLL生成使用成功:show()函数 —— C编译环境\n");
#endif
}


//编译运行,会生成DLL.dll和DLL.lib文件,再加上DLL.h文件用于下面的DLL的使用
2)使用动态库
DLL.dll和DLL.lib文件,再加上DLL.h文件拷贝到新建的工程目录下,在配置好链接器中的“附加依赖项”,最后在main.cpp中写上下面的代码:

//main.c或者main.cpp调用DLL.dll中的2个函数
#include "DLL.h"
#pragma comment(lib,"DLL.lib")
int main()
{
    cout<<"add(1,2) = "<<add(1,2)<<endl;
    show();

    getchar();
}
编译运行,结果如下图所示:

这里写图片描述

——————————————————————————————————————

2:
【创建DLL】
//head.h
#ifndef _HEAD_H_
#define _HEAD_H_

#ifdef __cplusplus
#include <iostream>
using namespace std;
extern "C"
{
#endif

    __declspec(dllexport) void show1();
    __declspec(dllexport) void show2();
#ifdef __cplusplus
};
#endif

#endif
----------------------------------------------------------------
//define1.cpp
#include "head.h"

__declspec(dllexport) void show1()
{
#ifdef __cplusplus
    cout<<"show1:这是一个c++程序"<<endl;
#else
    printf("show1:这是一个C程序\n");
#endif
}
----------------------------------------------------------------
//define2.c
#include "head.h"

__declspec(dllexport) void show2()
{
#ifdef __cplusplus
    cout<<"show1:这是一个c++程序"<<endl;
#else
    printf("show2:这是一个C程序\n");
#endif
}

【使用DLL】
//.dll,.lib,.h三个文件拷贝到新建的工程中,再在main.c或者main.cpp添加下面代码
#include "head.h"
#pragma comment(lib,"DLL.lib")
int main()
{
    show1();
    show2();

    getchar();
}
编译运行,结果如下图所示:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值