1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib
2,打开工程后添加 dltest.h, dltest.cpp,其中.h与.cpp名字没必要一样
3,编写代码
----------------------------------------------
--dltest.h
#pragma once
_declspec(dllexport) void Print(const char* str);

----------------------------------------------
--dltest.cpp
#include<iostream>
#include"dltest.h"
void Print(const char* str)
{
std::cout << "dltest>> " << str << std::endl;
}

4,编译,生成 <库的名字是根据工程名生成的>
若是静态库,则会生成 xdltest.lib.
若是动态链接库则生成 xdltest.lib 和 xdltest.dll

5,使用
(1)将xdltest.lib添加到 <属性-配置属性-链接器-输入-附加依赖项>
(2)在<属性-配置属性-链接器-常规-附加库目录>中指定xdltest.lib的目录
(3)在<属性-配置属性-c/c++-常规-附加包含目录>中指定dltest.h的目录
(4)在程序中 #include "dltest.h" 后即可使用Print("hello")输出了

下面有三种方式使用库函数
-----------------------------------------
--使用方式一
#include "stdafx.h"
#include "abc.h" //包含库的头文件

int main()
{
Print("hello,world");
return 0;
}
-----------------------------------------
--使用方式二
#include "stdafx.h"
void Print(const char* str); //声明库中的函数,使编译通过

int main()
{
Print("hello,world");
return 0;
}
-----------------------------------------
--使用方式三
#include "stdafx.h"
_declspec(dllimport) void Print(const char* str); //从库中导入进工程

int main()
{
Print("hello,world");
return 0;
}
6,运行
若是动态链接库则必须把dll文件拷到exe目录下才能运行

原理:
.h文件用于编译,使程序在语法上检测通过,利用这个原理,
可以不使用.h文件而直接将需要使用的库函数在使用前声明出来
.lib文件用于链接,若是静态链接库,直接将函数实现写入了exe中,
若是动态链接则是在exe中留下函数签名并标记它是运行时动态加载的

------------------------------------------------------------------------------------------------------

需要注意的是:

1,C#只能调用 C/C++的DLL,而不能调用lib,

2,C++生成的DLL中,函数名被改了(各编译器而不同),而C#调用C++ DLL时需要指定函数名字,因此会出错,找不到函数

对应方法是:生成C风格的DLL,它的函数是没改名字的。

C风格的DLL中函数声明加上 exterun "C",如:

exterun "C" _declspec(dllexport) void Print(const char* str);

c++动态链接库及静态链接库的生成与使用的更多相关文章

  1. Linux下动态链接库和静态链接库

    第一部分:编译过程 先了解一下linux下C代码的编译过程,C代码的编译,一般分成四个阶段,包括:预编译,编译,汇编和链接,这四个阶段的分工是 预处理过程,负责头文件展开,宏替换,条件编译的选择,删除 ...

  2. Qt 共享库(动态链接库)和静态链接库的创建及调用

    前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...

  3. [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

    来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...

  4. 利用GCC编译器生成动态链接库和静态链接库

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...

  5. Windows 下动态链接库和静态链接库

    1.静态链接库:就是在编译的时候把库中代码复制进工程中,导致工程变大,但是速度快. 缺点在于一套代码可能在内存中有多份拷贝,占用内存. 2.动态链接库:库由windos api加载库代码,内存中只有一 ...

  6. GCC 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  7. GCC 编译使用动态链接库和静态链接库的方法

    1 库的分类 依据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的.所以生成的可执行文件就不受库的影响了.即使库被删除了,程序依旧能够成功执行. 有别于静态库,动态库的链接是在程 ...

  8. 【转】gcc 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  9. GCC编译过程与动态链接库和静态链接库

    1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...

随机推荐

  1. 谈一谈手机WebApp的fixed属性(手机上的固定栏)【转】

    1.iphone/android原生app常见结构 似乎,所有的手机应用,都遵循这样的布局:固定的顶部+固定的底部+可滚动在中间区域.这种“雷同”的模式让人恶心,却不得不承认这是一种很规矩却又很实用的 ...

  2. IE兼容BUG汇总及解决方案(持续更新)

    本篇为总结开发过程当中遇到的各种IE兼容性的小问题,比较复杂的会单开一篇文章来讲解. 另:我手头目前只有原生IE8,原生IE9,原生IE11,以及IE11模拟的IE5,7,8,9,10.因IE6太过古 ...

  3. oracle过滤某个字段重复记录,只获取一条记录

    一,首先想到: 1,关键字distinct 2,group by 3,MAX,MIN这样的函数被称为聚集函数,和GROUP搭配起来用 但均无法实现,执行结果如下 举例: 表名:OffsiteOutre ...

  4. 捕捉过滤器(CaptureFilters)和显示过滤器(DisplayFilters)--Wireshark

    Wireshark的基本使用——过滤器 前言 网络上关于Wireshark的教程已有不少,博主就简单介绍一下Wireshark分析数据包时最重要的技巧之一的过滤器..一次性嗅探到的数据包有很多,想要高 ...

  5. Git Flow分支策略

    就像代码需要代码规范一样,代码管理同样需要一个清晰的流程和规范 Vincent Driessen 同学为了解决这个问题提出了 A Successful Git Branching Model 下面是G ...

  6. dig命令使用大全

    https://www.cnblogs.com/daxian2012/archive/2013/01/10/2854126.html 译者序:可以这样说,翻译本篇文档的过程就是我重新学习DNS的过程, ...

  7. Redis 集群方案介绍

    由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法 ...

  8. prefix sums--codility

    lesson 5: prefix sums 1. PassingCars 2. CountDiv 3. GenomicRangeQuery 4. MinAvgTwoSlice lesson 5: pr ...

  9. application项目获取bean

    对于web项目,编程方式获取bean如下: WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); C ...

  10. spring 配置文件中使用properties文件 配置

    配置Bean载入properties文件: <bean id="propertyPlaceholderConfigurer" class="org.springfr ...