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_namespace
15 {
16     class MY_DLL_API MySimpleDll
17     {
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_namespace
11 {
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 } 
时间: 2024-08-04 18:30:34

visual studio中新建和使用dll的相关文章

Umbraco -- 在Visual Studio中新建一个View 如何在Umbraco back office 中显示出来

在使用Umbraco中的过程中,遇到一个问题. 我在项目中(Visual Studio),添加了一个View---Test.cshtml. 然后进入到该Umbraco项目的back office, 在back office 的 Templates中,刷新之后,并没有发现这个view(Template). 为什么呢? 因为Umbraco back office 中的Template,是有一些相关的信息保存在数据库中的, 加载时,会根据数据表中的相关信息来加载这个Umbraco back offic

菜鸟进阶之:VC++之Visual Studio中DLL调用实现[静态嵌入]

C++写的DLL,用C++调用其实是一个比较简单的事情,调用DLL函数的方法其实有很多,说一个最普通的方法: 1.新建一个解决方案,文件->新建项目->Visual c++->win32 控制台应用程序->Next->DLL->完成.2.项目属性中->配置类型->静态(.lib).3.lib2.h文件: class lib2 { public: lib2(); ~lib2(); int calc(int val1, int val2); }; 4.lib3.

Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件出错的解决方案

Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件,运行页面,会出现如下的错误: 错误原因 VisualStudio 2012(或2013) WebForm 4.5 开发中,很多控件默认Enable了 Unobtrusive ValidationMode(所谓Unobtrusive Validation,就是一种隐式的验证方式)的属性(和jquery的引用相关),但并未对其进行赋值, Programmer必须手动对其进行设置.比如,在进行数据验证时

Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法

原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,换成了win7的64位系统 调试原来的工程,由于在其中引用了"SQLite"的32位的dll,导致在64为位下程序无法运行(但是编译可以通过) 后来通过修改工程文件(.csproj),在其中设置引用的条件,解决了问题 打开引用了SQLite的工程(例如叫做info)的工程文件(info.csproj),找到对SQLite引用的语句,类似如下的代码 代码如下: <Reference Include="Syst

Visual Studio中Debug与Release以及x86、x64、Any CPU的区别

Visual Studio中Debug与Release的区别: 在Visual Studio中,编译模式有2种:Debug与Release.这也是默认的两种方式,在新建一个project的时候,就已经存在这两种模式供选择. Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.      Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用. SO:      一般都是用Release来打包发布程序,因为Re

在Visual Studio中入门F#

写在前面的话 个人由某方面的兴趣需要学习 F#,网络上有关F#的中文资料很少,微软官方有很不错的文档,但是很可惜的是绝大部分的章节都是英文的.个人是一位.NET爱好者,想自己将 F# 的官方文档翻译出来,算是为了自己喜欢的 .NET 做一些贡献. 原文链接 Getting started with F# in Visual Studio 在这篇文章中 安装 F# 创建一个控制台应用程序 编写您的代码 运行您的代码 使用 F# Interactive 在 Visual Studio IDE 中支持

Visual Studio中的环境变量(以Visual Studio 2013为例)

前言 本文总结了Visual Studio中常见的环境变量及其在组织解决方案.工程中的作用. 注:本文使用的是Visual Studio 2013,由于作者主要从事C/C++开发,所以是以Visual C++的工作环境配置来描述. 什么是vs的环境变量? 先看图吧,图中以美元符号$开头 + 一对括号,这样进行引用的就是我所谓的环境变量, 图中出现的几个环境变量含义如下: 环境变量名 含义 $(SolutionDir) 解决方案目录:即.sln文件所在路径 $(Configuration) 当前的

visual studio C/C++ 编程学习 visual studio 中的生成事件

也许是太方便了,大家在visualstudio中调试代码时,大多习惯了直接点这个小绿箭头,但其实从点这个小绿箭头直到程序开始运行中间经历了多个步骤. 下面我就这段事件在编译过程中遇到的问题,讲一些我的经验. 今天先来说一说 visual studio 中的生成事件 一个事例:有几幅bmp图像数据文件放在 test .vcproj工程文件所在文件夹下面的Data文件夹中.此时,外界调用该工程所生成的DLL文件,且需要取Data文件夹中bmp图像数据文件. 如下图所示: 作为首启动项的CallTes

Visual Studio中的/MD, /MT, /MDd, /MTd 选项

Visual Studio中/MD, /MT, /MDd, /MTd表示多线程模块是否为dll.对于这几个选项我的理解如下: /MD: 定义了_MT和_DLL,让程序用多线程和dll版本的运行库. /MT: 让程序用多线程和静态版本的运行库. /MDd: 定义了_MT._DLL._DEBUG,让程序用debug模式下多线程和dll版本的运行库. /MTd: 定义了_MT和_DEBUG,让程序用debug模式下的多线程和静态版本的运行库. 参考资料:https://msdn.microsoft.c