2016-12-11   23:02:24

一:生成DLL

1:创建DLL工程

文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)

填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成。

到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。

MyDLL.cpp内容如下:

#include<iostream>
using namespace std;
#include "MyDLL.h" int Add(int &a,int &b)
{
return a+b;
}

MyDLL.h内容如下:  (有的可能没有lib文件生成)

 extern "C" __declspec(dllexport) int Add(int &a,int &b); 

在C++程序中使用刚才生成的DLL文件步骤:

新建一个win32 控制台工程,取名testMyDLL,新建两个文件:testMyDLL.cpp和testMyDLL.h,

首先需要 隐式链接采用静态加载的方式,比较简单,需要.h、.lib、.dll三件套。新建“控制台应用程序”或“空项目”。配置如下:(这一点非常重要)“三部曲”

项目->属性->配置属性->VC++ 目录-> 在“包含目录”里添加头文件MyDLL.h所在的目录

项目->属性->配置属性->VC++ 目录-> 在“库目录”里添加头文件MyDLL.lib所在的目录 
项目->属性->配置属性->链接器->输入-> 在“附加依赖项”里添加“MyDLL.lib”(若有多个 lib 则以空格隔开)

testMyDLL.cpp内容如下:

#include
using namespace std; int main()
{
int a =;
int b =;
cout<<Add(a,b)<<endl; getchar();
}

testMyDLL.h:

extern "C" _declspec(dllexport) int Add(int &a, int &b);

现在可以编译通过了,但是程序运行就报错,还需要将MyDLL.dll复制到当前项目生成的可执行文件所在的目录。(这一点非常重要)  否则缺少dll文件/

注意:如果只有dll文件,那么必须在程序里面调用LoadLibrary()函数才能使用,如果有lib文件,那么有两种方式可以马上进行调用

(1). Dependencies (推荐使用,要求有lib源代码)

一个项目被分成多个工程来做,一个主工程exe,其他为静态库lib

Project-->dependencies,设置主工程的依赖为其他静态库lib

这时,主工程的Resource Files中自动添加了lib

在主工程中需要用到其他库的位置加入库的头文件

(2). 直接将lib添加到需要用的工程中(不太推荐,lib没能统一管理)

提供了lib和其头文件

选择工程-->右键-->Add Files to Project

这时,主工程的Resource Files中自动添加了lib

在主工程中需要用到其他库的位置加入库的头文件

(3).  通过工程的Link设置(推荐,lib可以统一管理)

提供了lib和其头文件

Project-->settings-->Link,选择Categery中的Input

在object/library modules里输入的动态链接库对应的.lib文件名

在Additional library path中输入动态链接库对应的.lib的路径

在主工程中需要用到其他库的位置加入库的头文件

(4).  #pragma (lib, "filename.lilb")(不太推荐,lib没能统一管理)

提供了lib和其头文件

在主工程中需要用到其他库的位置加入#pragma (lib, "filename.lilb")

在主工程中需要用到其他库的位置加入库的头文件:

参考:  VS2013创建dll动态链接库文件心得

使用VS2012生成DLL文件

dll的使用的更多相关文章

  1. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  2. C#创建dll类库

    类库让我们的代码可复用,我们只需要在类库中声明变量一次,就能在接下来的过程中无数次地使用,而无需在每次使用前都要声明它.这样一来,就节省了我们的内存空间.而想要在类库添加什么类,还需取决于类库要实现哪 ...

  3. 关于Linux和Windows下部署mysql.data.dll的注册问题

    mysql ado.net connector下载地址: http://dev.mysql.com/downloads/connector/net/ 选择版本: Generally Available ...

  4. Windows平台Go调用DLL的坑

    最近的项目中,使用了GO来开发一些服务中转程序.业务比较简单,但是有一些业务需要复用原有C++开发的代码.而在WINDOWS,用CGO方式来集成C/C++代码并不是太方便.所以用DLL把C++的代码封 ...

  5. C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁

    系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...

  6. .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程

    JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...

  7. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  8. ILMerge合并多个DLL

    序言 如果你的项目要提供多个dll给别人用,那么不妨让你的dll合并为一个,让别人看起来简洁,引用起来不会过于繁琐. 本篇比较少,但也算是比较实用吧. 下载微软的辅助工具ILMerge Imerge下 ...

  9. VS2010中dll不可用问题

    最近做项目的时候,深圳那边提供了一个算法.算法在那边跑的好的很,但是在我这边怎么跑都跑不起来,总是报错:说找不到dll. 1.第一种想法:找不到dll,是不是dll放的位置不对.找了一下目录,导入的路 ...

  10. MVC默认路由实现分页-PagerExtend.dll

    这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的. A.效果(这里用了bootstra ...

随机推荐

  1. Python 综合应用小项目一

    数据库报错重连机制 利用异常捕获来获取mysql断开的报错,然后再重连 import MySQLdb as mysql class DB: def __init__(self,host,user,pa ...

  2. 第四部分 linux使用者管理

    第一章 linux帐号管理与acl权限控制    不同的用户拥有不同的权限    可以通过user/group的特殊权限设定,来规范不同的群组开发 一 linux帐号与群组 A 使用者的识别码: UI ...

  3. Jeddict研究过程中的总结

    一.与作者交流的总结 说来也是惭愧,没有太多的经验,先给大家贴两张图,看看大家能不能发现问题: 在最开始的时候,都处于Gaurav Gupta让我给材料的过程,因为我不是缺这个就是缺那个,根本说不清楚 ...

  4. js的编码函数

    js对文字进行编码,涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent ...

  5. api调用安全

    直接传 key 简直就是多此一举啊,随便监听一下网络就能把你的 key 盗走. 最简单的方式是使用签名,各大开放平台都是这样做的,性能好,安全性不错. 签名基本原理是通过 key/secret 的实现 ...

  6. ACE的饼图显示保留两位小数

    修改源js文件:jquery.flot.pie.min.js <script src="/static/assets/js/jquery.flot.pie.min.js"&g ...

  7. Xode 8 的那些坑

    刚发布完Xcode的8.0果断更新了,发现用起来非常容易闪退,关键是我编辑项目时默认使用Xcode8打开,导致我用Xcode7打开Xib是报错: This version does not suppo ...

  8. ubuntu通过cifs-utils访问Windows共享目录

    ubuntu旧一点的版本如:12.0x是用smbclient访问window共享的,但比较新的版本如:16.04是通过cifs-utils访问Windows共享目录 同样道理先安装: apt-get ...

  9. 23深入理解C指针之---数组的基础

    数组是c语言内置的数据结构,数组有一维数组.二维数组和多维数组.使用数组传递数组时,必须传入数组的大小. 一.数组的特征:阐明数组的特点 1.数组要素: 1).数组类型:数组中存储的数据的类型: 2) ...

  10. LeetCode OJ--Merge Sorted Array *

    http://oj.leetcode.com/problems/merge-sorted-array/ 两个有序数组A和B的归并排序,将结果存到A中.因为已知两数组长度且A的数组足够大,所以倒着处理, ...