先看我的总结:

总结:

1.头文件中如果想以C形式提供,要判断,如果定义了 _cplusplus, extern "c"{  这里写接口声明 }

2.接口声明中,要表明接口接入点的方式, __stdcall

3.记得创建定义文件,文件中指明了DLL对外提供了哪些接口

4.添加资源文件,添加资源文件的方式。资源文件的作用

5.生成dll的时候,注意如果是release还是debug的,如果是release要配置 其 代码生成方式为 多线程/MT。

6.生成的.lib文件是别人调用开发时使用到,.dll文件是在别人程序运行时使用到。

7.调用工程需要配置:

  a.配置头文件的目录:c/c++->常规->附加包含目录 ,多个用分号隔开。如果头文件在本工程目录下可以不用配置

  b.配置库文件lib:

      i.添加lib文件:linker->input->Additional Dependencies 添加需要包含的lib文件名,如果有多个,使用空格隔开。

      ii.添加lib的文件路径(所在文件夹):linker->general->Additional Libarry Directories,将lib所在文件夹加入。

8.测试技巧:可将dll工程和调用工程放在同一个解决方案下面。

http://blog.csdn.net/zwb8848happy/article/details/7831567

http://blog.csdn.net/lushuner/article/details/23947407

VS 2005 创建DLL工程,并进行调用与调试例子

1  例子目标

在Window下,学会使用Visual Studio 2005创建简单的DLL工程,以及对DLL提供的接口进行调用与调试。

2  DLL工程

2.1 创建工程

打开VS2005,并创建工程。如图所示。

这里选择“Win32 控制台应用程序”即可。选择工程的位置,以及添加工程的名称“DllTest”,然后按“确定”。

接着,出现“Win32 应用程序向导”,按“下一步”即可。

然后,出现下面的对话框。

这里应用程序类型选择“DLL”,附加选项选择“空目录”即可。便创建了简单DLL工程。其“解决方案”显示框内容如下:

这里新创建的DLL工程是不包含任何文件的。

2.2 DLL开发

在创建了DLL工程之后,便可以进行开发。步骤如下:

首先,创建头文件DllTest.h,如图:

这一幅图是说明了在工程中添加文件的方式,包括添加头文件和下面的源文件、模块定义文件和资源文件等等。

DllTest.h头文件的内容如下:

#ifndef _DLLTEST_H_

#define _DLLTEST_H_

#ifdef __cplusplus

extern "C"

{

#endif

int __stdcall example(intvalue);

#ifdef __cplusplus

}

#endif

#endif

请注意,上面头文件代码中,“#ifdef __cplusplus”语句定义了该DLL工程的接口以C的形式提供。另外,接口入口点方式是__stdcall。

第二步,创建源文件DllTest.cpp,实现接口。如图所示:

源文件DllTest.cpp的文件内容如下:

#include <stdio.h>

#include "DllTest.h"

int __stdcall example(intvalue)

{

printf("value: %d\n", value);

return 1;

}

上面代码只是简单的打印传递过来的参数。请注意,这里是使用printf打印的,因此在后面调用的例子中,控制台方式才能显示出来。

第三步,在创建了头文件和实现了接口以后,就需要创建模块定义文件,如下图所示。这个文件的意义在于说明DLL提供哪些接口给其它应用程序调用。

模块定义文件DllTest.def的内容如下:

LIBRARY  "DllTest"

EXPORTS

example

上面代码只导出example接口,即其它应用程序调用DllTest.dll的接口时,只有example接口可以使用。

2.3 版本信息

生成的DLL一般需要版本信息或者一些说明信息,当然也可以没有。

首先,添加资源文件,如图所示:

这里是添加版本信息,选择“Version”即可。

默认的版本信息如下:

如果在以后的开发中,提供给别人使用的DLL有不同版本,可以通过这里的版本号来说明。一般越后面的版本,版本号越大。

2.4 生成DLL

在开发完毕DLL接口以后,便可以生成。

生成方式有两种,一种是Debug方式,一种是Release方式。其中第一种方式可以在本机器调用调试DLL工程的时候可以使用。再生成给别人调用的时候,使用Release方式生成DLL。

Release方式生成DLL时注意,设置其“代码生成”方式为“多线程/MT”,如下图所示。

这种方式下别人调用DLL就不需要另外的DLL环境了。

至此,DLL开发完毕,其生成的Release内容如下:

其中,DllTest.lib在别人调用开发时,使用到。DllTest.dll在别人程序运行时,需要使用到。

3 DLL调用测试例子

上面第二节,说明了如何创建一个简单的DLL工程,下面说明如何调用DLL提供的接口。

3.1 创建测试工程

创建控制台测试例子test工程,过程如下:

注意,这里选择的是默认的“控制台应用程序”。

3.2 配置DLL库文件

把第二节生成DLL的库文件拷贝到测试工程test下(不是其任意子目录)。库文件的文件包括:

DllTest.h、DllTest.lib和DllTest.dll。

配置头文件路径,如下:“C/C++ ->常规 ->附加包含目录”,如果头文件不在测试工程目录下,需要配置头文件路径,这里可以设置多个目录,也可以设置相对路径。由于头文件在DllTest.h在工程下,该目录可以不设置。(这里是头文件所在文件夹路径,不是文件)

配置库文件lib,如下图所示:

“连接器->输入->附加依赖项”设置需要调用的库文件,这里是DllTest.lib,如果调用多个,可以填写多个lib文件名称,用空格分开。

“连接器->常规->附加包含目录”设置lib所在的目录,如下图所示。在测试工程目录下,可以不设置。

3.3 编写测试代码

创建源文件test.cpp。

程序内容如下:

#include <stdio.h>

#include "DllTest.h"

void main()

{

int rv = example(100);

printf("return value: %d\n", rv);

}

按“Ctrl+F5”即可编译和生成代码。显示内容如下:

4 调试DLL

有时候,需要在调用DLL的同时,也需要测试DLL工程本身,这时候,可以把DllTest和test工程放在同一个“解决方案”下。过程如下。

4.1 统一解决方案

首先,打开DllTest工程,在该“解决方案”下添加工程,如图所示:

添加了test工程之后,该解决方案如下图所示:

设置test工程为启动项目,如下图所示:

4.2 配置头文件路径和库文件

与3.2一节一样,配置头文件和库文件。一般头文件配置与3.2一致即可,如果头文件会更改也需要指向DllTest工程的头文件。如下图所示:

由于DllTest工程目录与test工程目录,所以设置的目录为../DllTest。

库文件由于DllTest工程可能在调试更改,因此需要在test工程中指向产生的DllTest.lib文件。设置如下图所示。

一般调试使用Debug方式,因此这里调用的是Debug版本的lib文件。

4.3 断点调试

配置好头文件和库文件之后,便可以设置断点进行调试,如下图所示:

总结:

1.头文件中如果想以C形式提供,要判断,如果定义了 _cplusplus, extern "c"{  这里写接口声明 }

2.接口声明中,要表明接口接入点的方式, __stdcall

3.记得创建定义文件,文件中指明了DLL对外提供了哪些接口

4.添加资源文件,添加资源文件的方式。资源文件的作用

5.生成dll的时候,注意如果是release还是debug的,如果是release要配置 其 代码生成方式为 多线程/MT。

6.生成的.lib文件是别人调用开发时使用到,.dll文件是在别人程序运行时使用到。

7.调用工程需要配置:

  a.配置头文件的目录:c/c++->常规->附加包含目录 ,多个用分号隔开。如果头文件在本工程目录下可以不用配置

  b.配置库文件lib:

      i.添加lib文件:linker->input->Additional Dependencies 添加需要包含的lib文件名,如果有多个,使用空格隔开。

      ii.添加lib的文件路径(所在文件夹):linker->general->Additional Libarry Directories,将lib所在文件夹加入。

8.测试技巧:可将dll工程和调用工程放在同一个解决方案下面。

创建dll教程的更多相关文章

  1. C#创建dll类库

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

  2. 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

    from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...

  3. VC++2008 用空工程创建 DLL

    VC++2008 用空工程创建 DLL 一.创建 DLL 工程项目: 1)点击菜单[File] -> [New] -> [Project...] 弹出 “New Project” 对话框: ...

  4. windows编程:创建DLL

    创建DLL Dll是动态链接库的缩写,可以作为附加代码动态映射到进程的地址空间中. 动态库的一般创建方法如下 方法1.使用 __declspec(dllexport)  方式导出 一般的框架如下 // ...

  5. VS2010环境下用ANSI C创建DLL和使用方法(转)

    源:VS2010环境下用ANSI C创建DLL和使用方法 . 创建DLL工程 1.2 创建一个dll工程. 操作:a.文件->新建->项目->Win32控制台应用程序. b.输入工程 ...

  6. C# 创建Dll文件供程序调用方法

    C# 创建Dll文件供程序调用方法 使用C#创建动态Dll文件方法: 1.  在VS2017环境下,新建-项目-选择类库类型: 2. 新创建一个.cs文件(如test.cs),编写代码如下: usin ...

  7. Altium 中异形焊盘异形封装的创建图文教程

    Altium 中异形焊盘异形封装的创建图文教程 一般不规则的焊盘被称为异型焊盘,典型的有金手指.大型的器件焊盘或者板子上需要添加特殊形状的铜箔(可以制作一个特殊封装代替). 如图27所示,此处我们以一 ...

  8. 利用C++创建DLL并C#调用

    日期:2018年11月26日 环境:window 10,VS2015 community 一.利用C++创建DLL 1.新建项目: 2.打开CreateDLL.cpp文件,并输入测试代码 #inclu ...

  9. MinGW 使用和创建 DLL 应注意的问题

    MinGW 是 GCC 的 Windows 版本,稳定版已经到了 4.5.2,功能和性能上很好,感觉不比 Microsoft 自家的 VC 差啊.但是 MinGW 下使用和创建 DLL 倒是要特别注意 ...

随机推荐

  1. Integrating SharePoint 2013 with ADFS and Shibboleth

    Time again to attempt to implement that exciting technology, Federation Services (Web Single Sign On ...

  2. [LeetCode] Group Shifted Strings 群组偏移字符串

    Given a string, we can "shift" each of its letter to its successive letter, for example: & ...

  3. Socket通信综合示例

    1用户注册客户单选择'用户注册',提示要输入用户名,密码,确认密码,校验成功后将用户信息保存到数据库,并提示数据库注册成功,请登录2用户登录客户端选择'登录以后'后,提示输入用户名和密码,验证成功则提 ...

  4. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  5. sql分页操作

    看到了网上关于分页的讲解  对最快的分页语句做了测试 还别说速度真快 总共6w条数据 速度确实so 快 前提是id是主键 或者是索引 declare @page int;--页数 declare @P ...

  6. 关于repaint(重绘)和reflow( 回流)

    repaint就是重绘,reflow就是回流.repaint主要是针对某一个DOM元素进行的重绘,reflow则是回流,针对整个页面的重排 严重性: 在性能优先的前提下,性能消耗 reflow大于re ...

  7. kubernetes&tensorflow

    谷歌内部--Borg Google Brain跑在数十万台机器上 谷歌电商商品分类深度学习模型跑在1000+台机器上 谷歌外部--Kubernetes(https://github.com/kuber ...

  8. AngularJS 细节

    AngularJS 表达式({{ expression }})类似于 AngularJS ng-bind 例子: <span>表达式</span> <div ng-app ...

  9. 【翻译】如何在AJAX生成的内容中再次运行Prism.js

    一.前言 最近用一个十分轻量级的网页代码高亮Js库,应用到项目中发现了一个问题,对于静态的已经写好的代码,Prism的高亮插件是没有问题的,但是通过Ajax异步获取数据并修改DOM时发现,Prism高 ...

  10. http请求与响应(content-type)

    http请求信息由浏览器把地址栏URL信息和页面(html.jsp.asp)组装成http请求消息体(如下). <request-line>(请求消息行)<headers>(请 ...