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打印的,因此在后面调用的例子中,控制台方式才能显示出来。

        上面代码只是简单的打印传递过来的参数。请注意,这里是使用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 断点调试

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

        

猜你喜欢

转载自blog.csdn.net/menghun_99/article/details/80636221