以下内容,我看了多篇文章,整合在一起,写的一个例子,关于dll工程的创建,请参考博客里另一篇文章:http://www.cnblogs.com/pingge/articles/3153571.html

有什么不对的欢迎指正!!!

1.头文件

 //testdll.h
#ifndef _TESTDLL_H_
#define _TESTDLL_H_ #ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport) //这个修饰符使得函数能都被DLL输出,所以他能被其他应用函数调用
#else
#define TESTDLL_API __declspec(dllimport) //这个修饰符使得编译器优化DLL中的函数接口以便于被其他应用程序调用
#endif #ifdef __cplusplus
extern "C"
{
#endif namespace MathFuncs
{
// This class is exported from the testdll.dll
// Returns a + b
extern TESTDLL_API double _stdcall Add(double a, double b); // Returns a - b
extern TESTDLL_API double _stdcall Subtract(double a, double b); // Returns a * b
extern TESTDLL_API double _stdcall Multiply(double a, double b); // Returns a / b
// Throws const std::invalid_argument& if b is 0
extern TESTDLL_API double _stdcall Divide(double a, double b);
} #ifdef __cplusplus
}
#endif #endif

使用__declspec(dllexport)导出DLL中的函数,extern “C”标志规范导出函数的修饰名称,是C++工程也能调用dll函数。

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

 #include "stdafx.h"
#include "testdll.h"
#include <stdexcept>
using namespace std; namespace MathFuncs
{
double _stdcall Add(double a, double b)
{
return a + b;
} double _stdcall Subtract(double a, double b)
{
return a - b;
} double _stdcall Multiply(double a, double b)
{
return a * b;
} double _stdcall Divide(double a, double b)
{
if (b == )
{
throw invalid_argument("b cannot be zero!");
}
return a / b;
}
}

以上是导出函数的定义。

 //demo.cpp
#include <iostream>
#include "testdll.h"
#pragma comment(lib,"testdll.lib")
using namespace std; int main()
{
double a = 7.4;
int b = ; cout << "a + b = " <<
MathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::Subtract(a, b) << endl;
cout << "a * b = " <<
MathFuncs::Multiply(a, b) << endl;
cout << "a / b = " <<
MathFuncs::Divide(a, b) << endl;
return ;
}

这是一个测试的demo,隐式连接调用dll函数,一定要三件套.h .lib .dll

欢迎指正!!!

DLL模块例2:使用__declspec(dllexport)导出函数,extern "C"规范修饰名称,隐式连接调用dll中函数的更多相关文章

  1. DLL模块例1:使用.def模块导出函数,规范修饰名称,显示连接调用dll中函数

    以下内容,我看了多篇文章,整合在一起,写的一个例子,关于dll工程的创建,请参考博客里另一篇文章:http://www.cnblogs.com/pingge/articles/3153571.html ...

  2. 【1】基于OpenCV的DLL动态库隐式连接

    1DLL的作用 DLL是一个包含可由多个程序同时使用的代码和数据的库.例如:在Windows操作系统中,Comdlg32 DLL执行与对话框有关的常见函数.因此,每个程序都可以使用该DLL中包含的功能 ...

  3. DLL导出函数和类 之 __declspec(dllexport)

    可利用__declspec(dllexport)导出函数或类. 若要指定C类型约定导出,则需在前面加extern “C”. 若要导出函数,__declspec(dllexport) 关键字必须出现在调 ...

  4. VC DLL方法的__declspec导入导出

    https://msdn.microsoft.com/zh-cn/library/a90k134d.aspx https://msdn.microsoft.com/zh-cn/library/ms23 ...

  5. DLL进一步讲解:extern "C" __declspec(dllexport)

    一.__declspec(dllexport): 将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口. 通常它和extern    "C"   ...

  6. 动态链接库(dll) __declspec(dllimport) __declspec(dllexport)

    一. __declspec(dllexport) Microsoft 在 Visual C++ 的 16 位编译器版本中引入了 __export,使编译器得以自动生成导出名并将它们放到一个 .lib ...

  7. __declspec(dllexport)和__declspec(dllimport) (——declspec方法创建dll的方法已验证ok)

    转载:https://www.cnblogs.com/chengbing2011/p/4084125.html __declspec(dllimport)和__declspec(dllexport)经 ...

  8. __declspec(dllimport)与__declspec(dllexport)作用总结

    参考自:http://bbs.csdn.net/topics/330169671 __declspec(dllexport):导出符号,也就是定义需要导出函数的dll中给导出函数的函数声明前面加上导出 ...

  9. __declspec(dllexport) & __declspec(dllimport)

    __declspec(dllexport) 声明一个导出函数,是说这个函数要从本DLL导出.我要给别人用.一般用于dll中 省掉在DEF文件中手工定义导出哪些函数的一个方法.当然,如果你的DLL里全是 ...

随机推荐

  1. yii2使用Gii生成代码

    本章节将介绍怎样使用 Gii 去自己主动生成 Web 网站经常使用功能的代码.使用 Gii 生成代码很easy,仅仅要依照 Gii 页面上的介绍输入正确的信息就可以. 贯穿本章节,你将会学到: 在你的 ...

  2. CF380C Sereja and Brackets [想法+线段树]

    题意: 给出一串括号 给出一些询问,问某个区间[l,r]内的能合法匹配的括号数有多少个 分析: 我们能够实现处理两个数组 sum[i] 1....i中已经能匹配的右括号的数目 left[i] 1... ...

  3. xml--通过DOM解析XML

    此文章通过3个例子表示DOM方式解析XML的用法. 通过DOM解析XML必须要写的3行代码. step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器) step 2:获得具体的dom解 ...

  4. 加入gitignore文件没有起作用怎么办

    步骤一: 假设有未提交的文件先提交到Git. 步骤二: 在Git根文件夹下运行以下的Git命令: git rm -r --cached . git add . git commit -m " ...

  5. ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同

    前言:在前两篇文章中,我们讲解了滑动页面的的实现方法与四大函数的意义,但有时,仅仅实现页面滑动是不够的,还要有标题栏才会显得更友好.所以在这篇文章中,我将会向大家展示在Android.support. ...

  6. Target runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem

    Description Resource Path Location TypeTarget runtime Apache Tomcat v6.0 is not defined. phyy Unknow ...

  7. java的练习

    import java.awt.GridLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.s ...

  8. SVN版本日志对话框命令使用指南

    日志使用指南 http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-dug-showlog.html

  9. java分布式开发,什么是分布式开发

    就是同一个服务,把数据库的不同部分分开建立到不同的服务器上.以缓解数据库大量数据访问的压力.很多大公司的业务量比较大,每天的访问量都达到几百万上千万,甚至上亿的访问量,在访问量不是很大的情况下,是可以 ...

  10. 过滤器(filter)实现

    花了2天时间,实现了过滤器功能,针对数据进行筛选,包含以下7个过滤器: 'date','currency','number','tolowercase','touppercase','orderBy' ...