一,在VS里面 新建项目->Visual C++ -> win32 控制台应用程序 -> 填写项目名称->下一步选择 dll ;

二,自动生成的文件如图:

以项目名称生成的Mydll.cpp,文件,我们可以在Mydll.cpp里面添加自己的函数和类;如:

#include "stdafx.h"
#define DLL_OUT __declspec(dllexport) DLL_OUT int Add(int a,int b)
{
  return a+b;
}
DLL_OUT int ride(int a,int b)
{
return a*b;
}

  

也可以新建个cpp文件,在里面添加如上的代码;

三,生成dll文件前要设置的选项:在项目的配置属性下面修改:

1.C++ ->代码生成-》多线程调试(/MTd)

2.C++ ->预编译头->不使用预编译头

最好F7编译就可以生成mydll,mydll.lib 这2个文件

四,使用刚才我们生成的dll文件;

1.新建个项目,在main.cpp文件下加入如下的代码:

#pragma comment (lib,"Mydll.lib")
//声明使用导入的Dll 文件,参数类型对就行
__declspec(dllimport) int Add(int a, int b);
__declspec(dllimport) int ride(int,int); int main()
{
int a = Add(10,11); //a = 21;
int b = ride(10,11); //b = 110;
return 0;
}

  

 

2. copy 到 要用的项目的目录中;和*.cpp文件所在的目录;放在这里的话只在调试的时候是调用这里的dll,如果想做在项目中使用,要copy到执行文件下面,执行文件才能找到他;

五,dll文件分代码段和数据段;代码段被加载的时候只加载一次,可以被多个进程共享,但数据段是被每个进程copy一份,是私有的;

六,发布dll文件给其他人开发的时候需要给3个文件:dll 的头文件,dll的lib文件,还包括一份声明dll函数的头文件;我们在简化下优化下上面的dll文件的写法:新建 Mydll.h,Mydll.cpp文件如果没有的话;

Mydll.h的内容如下:

#ifndef _MYDLL_H
#define _MYDLL_H #ifdef MYDLL_EXPORTS
#define MYDLL __declspec(dllexport)
#else
#define MYDLL __declspec(dllimport)
#endif MYDLL int Add(int a, int b);
MYDLL int ride(int a, int b); #endif

Mydll.cpp:

#define MYDLL_EXPORTS
#include "Mydll.h" int Add(int a,int b)
{
return a+b;
} int ride(int a,int b)
{
return a*b;
}

编译后,其他项目的调用方法:

#include "Mydll.h"
#pragma comment (lib,"Mydll.lib") int main()
{
int a = Add(10,11); //a = 21;
int b = ride(10,11); //b = 110;
return 0;
}

简单吧;

七,包含文件可以用<>和"" 这2个符号,其中<>代表系统目录,这个系统目录其实是可以在vs中定义的,如图:

八,以上说的都是动态库的创建和使用方法;下面说一下静态库的创建和使用;

1.和上面一样,新建项目的时候选择 静态库和空项目,和普通的写法一样,生成的是个*.lib文件,只要把*.h和*.lib 发给用户使用就行;

2.调用的时候,和普通的调用方式一样;

3.静态库使用不方便,必须要同一个编译器才能编译,约束非常多,不建议使用

九,手动加载Dll,用到的函数LoadLibrary加载和FreeLibrary卸载;写法如下:

	HINSTANCE handle = LoadLibrary("Mydll.dll");
if (handle)
{
typedef int (*DLL_FUNCTION_VER) (int,int);
DLL_FUNCTION_VER dll_func = (DLL_FUNCTION_VER)GetProcAddress(handle,"Add");
if (dll_func)
{
int result = dll_func(10,20);
printf("result: %d",result);
}
FreeLibrary(handle);
}

  

  

C++的动态库和静态库(dll)的更多相关文章

  1. 【转】iOS动态库和静态库的简要介绍

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  2. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  3. VS2008 动态库和静态库的生成和加载

    第一:动态库和静态库的生成: 1) 新建一个生成dll工程: 文件->新建->项目->Win32->Win32控制台应用程序 输入项目名称:dllTest ,项目路径:D:\V ...

  4. Windows 下VC++6.0制作、使用动态库和静态库

    Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...

  5. SQLite3动态库、静态库编译

    资源准备 1.下载SQLite3源码,下载地址为https://www.sqlite.org/download.html.下载sqlite-amalgamation-3200000.zip和sqlit ...

  6. gcc 编译动态库和静态库

    Linux C 编程入门之一:gcc 编译动态库和静态库 cheungmine 2012 参考: C程序编译过程浅析 http://blog.csdn.net/koudaidai/article/de ...

  7. VC 静态库与动态库(二)静态库创建与使用

    1.新建项目,创建项目和解决方案 StaticLibrary  这是静态库项目 G:\C++Learn\Library  Library文件夹用于存放库相关文件,包含静态库与后面的动态库工程和解决方案 ...

  8. 动态库与静态库的学习 博主写的很好 静态库 编译的时候 需要加上 static 动态库编译ok运行不成功就按照文章中的方法修改

    来源连接   http://www.cnblogs.com/skynet/p/3372855.html C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库 ...

  9. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  10. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

随机推荐

  1. window.location网页URL信息

    window.location属性 描述 hash 设置或获取 href 属性中在井号“#”后面的分段. host 设置或获取 location 或 URL 的 hostname 和 port 号码. ...

  2. PHP面试题及答案解析(7)—Linux系统命令

    1.请解释下列10个shell命令的用途.top.ps.mv.find.df.cat.chmod.chgrp.grep.wc top:该命令提供了实时对系统处理器状态的监控,它能够实时显示系统中各个进 ...

  3. es快照和备份

    注册前要注意配置文件加上 path.repo: ["/data/es_backup"] 然后重启es 不然会报错doesn't match any of the locations ...

  4. 自己定义控件三部曲视图篇(二)——FlowLayout自适应容器实现

    前言:我最大的梦想,就是有一天.等老了坐在摇椅上回望一生,有故事给孩子们讲--. 相关文章: <Android自己定义控件三部曲文章索引>:http://blog.csdn.net/har ...

  5. Atitit.pdf 预览 转换html attilax总结

    Atitit.pdf 预览 转换html attilax总结 1. Swf flash还是html1 2. pdf2htmlEX1 3. iText 5.5.0 发布,Java 的 PDF 操作类库1 ...

  6. PHP运行环境之IIS FastCGI 进程意外退出解决办法

    本机做了系统,结果之前装好的APACHE环境什么的都没了,不想费事了,这次直接使用WIN8自带的IIS功能了,安装完毕后提示FastCGI 进程意外退出解决办法,这是由于某些加载库加载失败的原因,这里 ...

  7. php 获取文件加的名称

    /*** * 根本平台类型获取文件名 */ function showGetFileName($type,$url){ #判断平台类型 if($type=='android'||$type=='ios ...

  8. commons-dbutils:1.6 ——java.sql.SQLException: 不支持的特性

    描述:使用jdbc创建连接后,使用commons-dbutils-1.6 数据库工具类,查询报错如下:java.sql.SQLException: 不支持的特性 Query: 经过测试跟踪在commo ...

  9. C语言合并两个集合(L,L1) 将L1中不在L中的元素插入到L线性表中

    void main(){ Sqlist L,L1; InitList(&L); InitList(&L1); ListInsert(&L, 1, 2); ListInsert( ...

  10. 【BZOJ4004】[JLOI2015]装备购买 贪心+高斯消元

    [BZOJ4004][JLOI2015]装备购买 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 ( ...