VS2013编写一个DLL,并创建EXE对DLL进行调用

来源:https://blog.csdn.net/u014630431/article/details/72732198

原作品写得好,但是几个细节没有交待清楚,所以在这里做补充。

一、创建DLL项目

        文件->新建->项目->Visual C++  win32控制台程序(填写项目名makeDLL)->下一步->(应用程序设计)勾选:DLL、导出符号->完成

二、项目自动生成了DLL模板

makeDLL.h
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MAKEDLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// MAKEDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef MAKEDLL_EXPORTS
#define MAKEDLL_API __declspec(dllexport)
#else
#define MAKEDLL_API __declspec(dllimport)
#endif
 
// 此类是从 makeDLL.dll 导出的
class MAKEDLL_API CmakeDLL {
public:
    CmakeDLL(void);
    // TODO:  在此添加您的方法。
};
 
extern MAKEDLL_API int nmakeDLL;
 
MAKEDLL_API int fnmakeDLL(void);

-------------------------------------------------------------

// makeDLL.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "makeDLL.h"
// 这是导出变量的一个示例
MAKEDLL_API int nmakeDLL=0;
// 这是导出函数的一个示例。
MAKEDLL_API int fnmakeDLL(void)
{
    return 42;
}
// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 makeDLL.h
CmakeDLL::CmakeDLL()
{
    return;
}
-------------------------------------------------------------

在makeDLL.h中声明要被调用的函数

MAKEDLL_API int add(int a, int b);  //具体位置见下代码

-------------------------------------------------------------

#ifdef MAKEDLL_EXPORTS
#define MAKEDLL_API __declspec(dllexport)
#else
#define MAKEDLL_API __declspec(dllimport)
#endif

// 此类是从 makeDLL.dll 导出的
class MAKEDLL_API CmakeDLL {
public:
    CmakeDLL(void);
    // TODO:  在此添加您的方法。
};
extern MAKEDLL_API int nmakeDLL;
MAKEDLL_API int fnmakeDLL(void);
MAKEDLL_API int add(int a, int b);  //你看,它加在这里哦!

-------------------------------------------------------------

在makeDLL.cpp中实现要被调用的函数

MAKEDLL_API int add(int a, int b)
{
    return a + b;
}

-------------------------------------------------------------

三、生成项目,在Debug中生成的文件如下

注意:在makeDll下面有两个makeDll文件夹,它生成的dll和lib文件是在第一个文件夹下的Debug之中,而不是下一层的makeDll/Debug之中哦!

四、创建要使用DLL的EXE项目

        文件->新建-> 项目->Visual C++ win32控制台应用程序(填写项目名testDLL)->一路下一步.....,

注意啊,你建一个testDll项目,它会有两个testDll目录,下面会说到该用到哪个目录。

五、引入DLL

        1、将makeDLL.h、makeDLL.lib放入testDLL文件夹,注意它是放在第2个testDll目录里。例如:放在D:\mfc\testDLL\testDLL里面。

        2、在资源管理器处,项目名称上右键,点开最下面属性页,选择C/C++->常规->附加包含目录,写入makeDLL.h文件的路径,这个路经当然是第2个testDll文件夹的路经了。

3、同样方法,进入属性页,选择  链接器->常规->附加库目录,写入makeDLL.lib 文件路径

 4、项目testDLL生成,出现Debug文件夹,将makeDLL.dll文件拷贝进Debug文件夹。它的意思是先产生一个Debug文件夹,然后将makeDll.dll拷贝进去,注意啊,是第一个Debug啊,不是D:\mfc\testDLL\testDLL\Debug这个文件夹。

如果出错误了,一般是.h,.lib,.dll 这几个文件存放错地方了。因为新建一个项目,它会出现几个相同的文件夹,容易搞混。

5、在testDLL.cpp文件中,对DLL中函数进行调用

               #pragma是一条编译器指令,告诉编译器要链接一些东西,在comment里指明是什么

#include "stdafx.h"
#include<iostream>
 
#include "makeDLL.h"
#pragma comment(lib,"makeDLL.lib")  //指定与静态库一起链接,手动包含(标题3所示)之后可以省略
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a, b, c;
    std::cin >> a >> b;
    c = fnmakeDLL(a, b);
    std::cout << c << std::endl;
    system("pause");
    return 0;
}
----------------------------------------------

  6、运行结果显示

猜你喜欢

转载自blog.csdn.net/jintingbo/article/details/81457245