VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性

本文介绍了如何在VS2010中创建一个动态链接库DLL,然后编写一个控制台应用程序进行测试。通过详细步骤展示了从新建项目、设置属性到生成DLL的过程,并提到了DLL对C++的依赖以及如何处理静态库的问题。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链接库为“JAVA调用动态链接库DLL之JNative学习”中使用的DLL,只是项目及文件名称不同。

创建动态链接库项目:
1、打开Microsoft Visual Studio 2010,选择文件->新建->项目。


2、在新建项目窗口中选择其他语言->Visual C++->Win32。


3、选择Win32 项目,设置名称:simpleDLL,设置解决方案名:simpleDLL。
4、单击确定,在出现的Win32 应用程序向导的概述对话框中点击下一步。


5、在应用程序设置中,选择应用程序类型下的DLL。


6、勾选附加选项下的空项目。
7、单击完成创建项目。
向动态链接库添加类:
1、添加新类头文件。右键单击simpleDLL项目,添加->新建项,选择头文件(.h),设置名称为simpleDLL,单击添加。



2、添加新类源文件。右键单击simpleDLL项目,添加->新建项,选择C++ 文件(.cpp),设置名称为simpleDLL,单击添加。



3、为新类添加内容。内容如下:

头文件simpleDLL.h:

//------------------ SimpleDLL.h ----------------#pragma once;//该宏完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入//宏DLL_IMPLEMENT在SimpleDLL.cpp中定义#ifdef DLL_IMPLEMENT#define DLL_API __declspec(dllexport)#else#define DLL_API __declspec(dllimport)#endifDLL_API int add(int x, int y); //简单方法DLL_API const wchar_t* getPlayUrl(const wchar_t* mgrIp, long mgrPort, long materialId);DLL_API const char* getUrl(const char* mgrIp, long mgrPort, long materialId);
源文件simpleDLL.cpp:

//------------------ SimpleDLL.cpp ----------------//注意此处的宏定义需要写在#include "SimpleDLL.h"之前//以完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入#define DLL_IMPLEMENT#include "SimpleDLL.h"#include<Windows.h>#include <intrin.h>#include <stdlib.h>#include <string.h>int DLL_API add(int x, int y)return x+y;}DLL_API const wchar_t* getPlayUrl(const wchar_t* mgrIp, long mgrPort, long materialId)static wchar_t url[260] = { 0 }; wcscpy_s(url, L"http://中文"); wcscat_s(url, mgrIp); wcscat_s(url, L":"); wchar_t szPort[20] = { 0 }; _ltow_s(mgrPort, szPort, 10); wcscat_s(url, szPort); return url;}DLL_API const char* getUrl(const char* mgrIp, long mgrPort, long materialId)static char url[260] = { 0 }; strcpy_s(url, "http://中文"); strcat_s(url, mgrIp); strcat_s(url, ":"); char szPort[20] = { 0 }; _ltoa_s(mgrPort, szPort, 10); strcat_s(url, szPort); return url;}

创建引用动态链接库的应用程序:
1、在解决方案上单击鼠标右键->添加->新建项目。


2、在添加新项目中选择其它语言->Visual C++->Win32。


3、选择Win32 控制台应用程序,设置名称:simpleDLLTest。
4、单击确定,在出现的Win32 应用程序向导的概述对话框中点击下一步。


5、在应用程序设置中,选择应用程序类型下的控制台应用程序。


6、单击完成创建项目。
在控制台应用程序中使用类库的功能:
1、为SimpleDLLTest.cpp添加内容。如下所示:

// SimpleDLLTest.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include "../SimpleDLL/SimpleDLL.h" //添加头文件引用#pragma comment(lib, "..\\..\\SimpleDLL\\Release\\SimpleDLL.lib") //添加lib文件引用 #include <process.h>#include <locale.h>int _tmain(int argc, _TCHAR* argv[]){ setlocale(LC_ALL, "chs"); //配置地域化信息为简体中文,否则打印出来的中文是乱码 wprintf(L"getPlayUrl: %s\r\n", getPlayUrl(L"127.0.0.1", 10087, 1)); printf("getUrl: %s\r\n", getUrl("127.0.0.1", 10087, 1)); system("pause"); return 0;}
2、引用simpleDLL项目。右键单击 SimpleDLLTest项目,选择项目依赖项。


3、依赖于窗口中勾选SimpleDLL,单击确定。


4、设置SimpleDLLTest项目为活动项目。右键单击SimpleDLLTest项目,选择设为启动项目。


6、生成解决方案。Debug运行结果如下:


注意:现在创建的DLL只能由c++调用,C语言等其它语言是调用不了的!

我们来用工具看一下,在解决方案上单击鼠标右键,在Windows资源管理器中打开文件夹


我编译的是Release版本,所以打开Release文件夹,找到SimpleDLL.dll文件,用Depends工具打开它


目前编译的版本对MSVCR100.DLL还有依赖,这样复制到其它没有安装VS2010的电脑上是用不了的;

在项目上单击鼠标右键,属性:


在左侧的配置属性中选择常规,在右侧找到MFC的使用,选择在静态库中使用MFC


这里是修改MFC的使用,还有另一种方法:vs2010发布时去除msvcp100.dll和msvcr100.dll图解说明

再看函数,带有一些特殊字符,这样c++之外其它语言是调用不了的;我们需要在头文件的函数声明中添加extern "C"标志,代码如下:

//------------------ SimpleDLL.h ----------------#pragma once;//该宏完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入//宏DLL_IMPLEMENT在SimpleDLL.cpp中定义#ifdef DLL_IMPLEMENT#define DLL_API __declspec(dllexport)#else#define DLL_API __declspec(dllimport)#endifextern "C" DLL_API int add(int x, int y); //简单方法extern "C" DLL_API const wchar_t* getPlayUrl(const wchar_t* mgrIp, long mgrPort, long materialId);extern "C" DLL_API const char* getUrl(const char* mgrIp, long mgrPort, long materialId);
重新编译,再 用 Depends工具打开它,可以发现依赖项已经没有了,函数名称也正常了:


参考:演练:创建和使用动态链接库 (C++)

解决方案源码下载:http://download.csdn.net/detail/testcs_dn/7411383

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值