先看我的总结:

总结:

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. C#文件目录操作完全手册

    需要 using System.IO; 1) 相对路径转绝对路径string fullfolder = HttpContext.Current.Server.MapPath(folder); 2) 文 ...

  2. IO流

    流的概念和作用 学习JavaIO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特 ...

  3. python网络编程-OSI七层模型详解

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  4. mybatis判断传入list大小

    <if test="tenantIds.size() > 0"> AND A.PROC_TARGET_ID IN <foreach collection=& ...

  5. Java之类的构造器(反射)

    反射: Java反射机制:指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法.这种动态获取类的内容以及动态调用对象的 ...

  6. Web系统大规模并发——电商秒杀与抢购

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  7. mysql 远程连接数据库的二种方法

    http://blog.csdn.net/freecodetor/article/details/5799550 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5 ...

  8. MAC上安装 HLA(High Level Assembly)

    1.安装HLA 最新版的hla汇编器可在这里下载,支持MacOs,Linux,Windows平台 2.安装步骤 将下载好的hla程序包放在Mac根目录下 最重要的一步是设置好环境变量,打开Mac根目录 ...

  9. 博文Contents<1--到200—>

    ====================-------------- 前言:博客中的随笔文章.并非都是笔者的原创文章.有些是听别人说的.有些是书上摘录的.有些是百度的.有些是别人博客的文章.有些是自己 ...

  10. jquery缓存使用jquery.cookies.2.2.0.min.js

    $.cookies.set(key, obj, { hoursToLive: 2}); key标识的键 , obj存入的值可以缓存json对象, hoursToLive 缓存小时数 $.cookies ...