首页 > 代码库 > visual studio中新建和使用dll

visual studio中新建和使用dll

本文的目的是 创建一个最小化的dll并使用它

环境:win7 + vs2012

 

一个VS的解决方案(sln)下面可以有多个项目(project),所以这里新建一个解决方案,然后下面创建两个项目。

 

新建第一个 Win32 项目 my_dll,注意,是Win32,DLL空项目

技术分享

 

 

在 my_dll 工程的 头文件 里头 添加 新建项 取名 my_dll.h

在 my_dll 工程的 源文件 里头 添加 新建项 取名 my_dll.cpp

 

my_dll.h里头写入:

 

 1 //------------------ my_dll.h ----------------   2    3 #pragma once;   4    5 // 该宏完成在dll项目内部使用__declspec(dllexport)导出   6 // 在dll项目外部使用时,用__declspec(dllimport)导入   7 // 宏 MY_DLL_IMPLEMENT 在my_dll.cpp中定义   8 #ifdef MY_DLL_IMPLEMENT   9     #define MY_DLL_API __declspec(dllexport)  10 #else  11     #define MY_DLL_API __declspec(dllimport)  12 #endif  13 14 15 MY_DLL_API double my_add(double a, double b);

 

my_dll.cpp里头写入:

 1 //------------------ my_dll.cpp ----------------   2    3 // 注意此处的宏定义需要写在#include "my_dll.h"之前   4 // 以完成在dll项目内部使用__declspec(dllexport)导出   5 // 在dll项目外部使用时,用__declspec(dllimport)导入   6 #define MY_DLL_IMPLEMENT    7    8 #include "my_dll.h"   9 10 double my_add(double a, double b)11 {  12     return a+b;  13 } 

然后就变成这个样子:

技术分享

 

 

然后点击 my_dll 解决方案,右键 ->添加->新建项目

技术分享

 

新建一个 Win32 控制台程序 use_my_dll

技术分享

 

点击 控制台应用程序空项目

技术分享

 

在 use_my_dll 工程下的 源文件 添加 新建项 取名 main.cpp

 1 //------------------ main.cpp -------------------   2 #include "my_dll.h"   3 #include <iostream>   4  5 using namespace std; 6    7 int main(char argc, char**argv)   8 {   9     cout << "----------------------" <<endl;  10     cout << "my_add: 3+5=" << my_add(3, 5)<<endl;  11     cout << "----------------------" <<endl;  12 13     system("pause");14     return 0;  15 } 

然后整个页面如下:

技术分享

 

 

现在 添加新应用附加包含目录

右键 use_my_dll 工程 选择属性,在“属性页”对话框中,展开“通用属性”节点、选择“框架和引用”,然后选择“添加新引用”按钮

技术分享

 

显示出 my_dll 工程,勾选并确定(如果my_dll工程和use_my_dll工程在不同的解决方案里,则这一步不会显示出任何工程,需要添加进来才能显示)

技术分享

 

再右键use_my_dll属性,依次展开“配置属性”节点和“C/C++”节点,然后选择“常规”“附加包含目录”旁边,指定 my_dll.h 头文件的位置路径。

技术分享

 

完成了这一步以后还要 右键 use_my_dll 工程将其 设为启动项目,缺了这一步会报错

技术分享

 

然后“调试”“开始执行(不调试)”就能显示出结果了:

技术分享

所有以my开头的变量和名字都可以随便取名。

 

要实现复杂点的功能的话可以在头文件my_dll.h中声明命名空间和类,在my_dll.cpp中实现,在main.cpp中调用

三个文件如下:

 1 //------------------ my_dll.h ----------------   2    3 #pragma once;   4    5 // 该宏完成在dll项目内部使用__declspec(dllexport)导出   6 // 在dll项目外部使用时,用__declspec(dllimport)导入   7 // 宏 MY_DLL_IMPLEMENT 在my_dll.cpp中定义   8 #ifdef MY_DLL_IMPLEMENT   9     #define MY_DLL_API __declspec(dllexport)  10 #else  11     #define MY_DLL_API __declspec(dllimport)  12 #endif  13 14 namespace my_namespace15 {16     class MY_DLL_API MySimpleDll17     {18     public:  19         MySimpleDll();  20         ~MySimpleDll();21 22         double my_add(double a, double b);23     };24 }

 

 1 //------------------ my_dll.cpp ----------------   2    3 // 注意此处的宏定义需要写在#include "my_dll.h"之前   4 // 以完成在dll项目内部使用__declspec(dllexport)导出   5 // 在dll项目外部使用时,用__declspec(dllimport)导入   6 #define MY_DLL_IMPLEMENT    7    8 #include "my_dll.h"   9 10 namespace my_namespace11 {12     MySimpleDll::MySimpleDll()13     {}14 15     MySimpleDll::~MySimpleDll()16     {}17 18     double MySimpleDll::my_add(double a, double b)19     {  20         return a+b;  21     } 22 }

 

 1 //------------------ main.cpp -------------------   2 #include "my_dll.h"   3 #include <iostream>   4  5 using namespace std; 6 using namespace my_namespace; 7  8 int main(char argc, char**argv)   9 {  10     MySimpleDll msd;11 12     cout << "----------------------" <<endl;  13     cout << "msd.my_add: 3+5=" << msd.my_add(3, 5) <<endl;  14     cout << "----------------------" <<endl;  15 16     system("pause");17     return 0;  18 } 

 

visual studio中新建和使用dll