在visual studio 2013 中写动态算法库并调用

来源:互联网 发布:it技术支持面试题 编辑:程序博客网 时间:2024/05/18 02:25

最近才开始学习写算法,需要写一个动态库实现算法,在查阅了网上很多资料后发现还是有点晕,于是参考了visual studio的帮助文档,发现里面有介绍如何建立一个动态算法库并调用的说明。于是根据该例子,自己建了人生中的第一个动态算法库,成功完成第一个算法库任务。这里不详细介绍动态库和静态库的区别了,仅记录下在VS2013中实现动态算法库的步骤。

1、打开vs2013,文件---->新建项目----->win32 控制台应用程序(输入项目名称dlldll、确定)---->下一步----->(应用程序类型选择)DLL、(附加选项勾选)导出符号---->完成

这时项目就建好了,可看到生成了三个头文件(dlldll.h\stdafx.h\targetver.h)和三个源文件(dlldll.cpp\dllmain.cpp\stdafx.h),此时不需要关注其他文件,我们的动态库主要实现代码写到dlldll.cpp,在dlldll.h中声明即可。自动生成的dlldll.cpp和dlldll.h已经给出了各种导出类型(函数、变量、类)的声明和实现例子,代码如下:

dlldll.h中声明:

// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLLDLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// DLLDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef DLLDLL_EXPORTS
#define DLLDLL_API __declspec(dllexport)
#else
#define DLLDLL_API __declspec(dllimport)
#endif


// 此类是从 dlldll.dll 导出的
class DLLDLL_API Cdlldll {
public:
Cdlldll(void);
// TODO:  在此添加您的方法。
};


extern DLLDLL_API int ndlldll;


DLLDLL_API int fndlldll(void);


dlldll.cpp中的实现代码:

//dlldll.cpp:定义了DLL应用程序的导出函数。

//

#include "stdafx.h"

#include " dlldll.h"


//这是导出变量的一个示例

DLLDLL_API int ndlldll=0;


//这是导出函数的一个示例

DLLDLL_API int fndlldll(void)

{

      return 42;

}


//这是已导出类的构造函数。

//有关类定义的信息,请参阅dlldll.h

Cdlldll::Cdlldll()

{

return;

}


按照上面的代码可以实现需要的所有接口,在写好算法实现后,编译,编译通过后在项目文件下可以看到一个DEBUG的文件夹,里面包含五个文件(dlldll.dll\dlldll.Exports Library File\dlldll.Incremental Linker File\dlldll.LIB\dlldll.Program Debug Database)即为我们需要给动态库(.dll和.lib)。

2.生成好动态库后,我们需要验证算法动态库是否正确

文件---->新建项目---->win32 控制台应用程序,名称dlltest,在解决方案栏选择添加到解决方案---->确定---->下一步---->控制台应用程序,清除预编译头前的勾选---->完成

3.在testdll项目选择状态下:项目---->引用---->通用属性下选择引用、添加新引用---->此时可见我们之前创建的dlldll,选择---->确定

4.编写调用主函数

5.配置调用项目属性---->配置属性---->VC++目录---->引用目录,选择刚建好的.lib文件目录,最后编译,运行即可。

0 0
原创粉丝点击