dll相关(二)

摘要:
invalid_ argument&28MATHFUNCDLL_APIdoubleAdd(doublea;定义DLL应用程序的导出函数。2//34#include“stdafx.h”5#include“MathFuncsDll.h”6#include<减法;

1、如何制作dll?

使用vs2012,新建控制台应用程序,在类型中选择DLL即可。

在工程中添加.h文件和.cpp文件,如MathFuncsDLL.h和MathFuncsDll.cpp,这里展示一个类和一个函数,代码如下:

 1 // MathFuncsDll.h
 2 
 3 #ifdef MATHFUNCSDLL_EXPORTS
 4 #define MATHFUNCSDLL_API __declspec(dllexport) 
 5 #else
 6 #define MATHFUNCSDLL_API __declspec(dllimport) 
 7 #endif
 8 
 9 namespace MathFuncs
10 {
11     // This class is exported from the MathFuncsDll.dll
12     class MyMathFuncs
13     {
14     public: 
15         // Returns a + b
16         static MATHFUNCSDLL_API double Add(double a, double b); 
17 
18         // Returns a - b
19         static MATHFUNCSDLL_API double Subtract(double a, double b); 
20 
21         // Returns a * b
22         static MATHFUNCSDLL_API double Multiply(double a, double b); 
23 
24         // Returns a / b
25         // Throws const std::invalid_argument& if b is 0
26         static MATHFUNCSDLL_API double Divide(double a, double b); 
27     };
28     MATHFUNCSDLL_API double Add(double a, double b);
29 }
30 extern "C" __declspec(dllexport) double add(double a, double b);
 1 // MathFuncsDll.cpp : Defines the exported functions for the DLL application.
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "MathFuncsDll.h"
 6 #include <stdexcept>
 7 
 8 using namespace std;
 9 
10 namespace MathFuncs
11 {
12     double MyMathFuncs::Add(double a, double b)
13     {
14         return a + b;
15     }
16 
17     double MyMathFuncs::Subtract(double a, double b)
18     {
19         return a - b;
20     }
21 
22     double MyMathFuncs::Multiply(double a, double b)
23     {
24         return a * b;
25     }
26 
27     double MyMathFuncs::Divide(double a, double b)
28     {
29         if (b == 0)
30         {
31             throw invalid_argument("b cannot be zero!");
32         }
33 
34         return a / b;
35     }
36 }
37 double add(double a, double b)
38 {
39     return a + b;
40 }

之后链接,生成即可。

2、如何调用dll?

dll调用分为显示调用和隐式调用。显示调用中,只需将.h和.dll文件放入工程中,在需要调用的代码中将.h文件include进来,然后使用类似如下的代码调用函数:

1 #include "MathFuncsDll.h"
2 
3 typedef double(*All)(double,double);
4 All pFunction;
5 pFunction=(All)GetProcAddress(hinstance,"add");
6 cout<<pFunction(10,10)<<endl;    

隐式调用:需要将.h,.lib,.dll文件添加入工程中,include进来.h文件,直接访问函数即可。代码如下:

1 #include "MathFuncsDll.h"
2 
3 cout<<add(10,10)<<endl;

免责声明:文章转载自《dll相关(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RPC应用的java实现win32-UpdateLayeredWindow下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OpenCV导向滤波(引导滤波)实现(Guided Filter)代码,以及使用颜色先验算法去雾

 论文下载地址:http://research.microsoft.com/en-us/um/people/jiansun/papers/GuidedFilter_ECCV10.pdf 本文主要介绍导向滤波,但是在网上看这算法还能去雾,不知道是具体是怎么利用导向滤波实现去雾的,希望过来人指点迷津,这块主要是重写了导向滤波应用于彩色图像的部分代码,希望与大家...

第十一节:Bundles压缩合并js和css及原理分析

一. 简介  1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是MVC中特有的一种优化方式。  (当然现在前端也有很多基于node的工作流插件,可以合并压缩混淆js或css) 2. 原理(了解即可):核心方法ApplyTr...

UE4在Android调用Project Tango

  Project Tango应该说是Google一试水AR的设备,其中Project Tango主要二个功能,一个是获取深度信息,如MS的Kinect,有相当多的设备都有这个功能,二是第一人称相对定位,这个就没那么常见了,如果对这个设备有更深的兴趣,可以看知乎上的这二个链接。   Google Project Tango获取深度信息的原理是什么?   P...

boost asio 学习(五) 错误处理

http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Error handling 接下来我们需要注意的话题是错误处理。换句话说就是函数抛出异常时发生了什么 Boost::asio 给予用户两种选择来处理。错误通过han...

【STM32H7】第6章 ThreadX操作系统移植(IAR)

论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第6章   ThreadX操作系统移植(IAR) 本章节将为大家介绍ThreadX内核的IAR方式移植和设计框架,理论上不建议初学者直接学习,因为本章节涉及到的知识点很多,建议对ThreadX的应用有一些了解后再...

Mac OS 安装mysqlcliet 失败问题解决

简单记录 Mac OS pip 安装mysqlclient报错处理过程 系统: python: Python 3.8.2 虚拟环境 直接安装 mysqlclient 会报错 Using cached https://files.pythonhosted.org/packages/f4/f1/3bb6f64ca7a429729413e6556b7ba5976...