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

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

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

1.头文件

 1 //testdll.h
 2 #ifndef _TESTDLL_H_
 3 #define _TESTDLL_H_
 4 
 5 #ifdef TESTDLL_EXPORTS  
 6 #define TESTDLL_API __declspec(dllexport)   //这个修饰符使得函数能都被DLL输出,所以他能被其他应用函数调用
 7 #else  
 8 #define TESTDLL_API __declspec(dllimport)   //这个修饰符使得编译器优化DLL中的函数接口以便于被其他应用程序调用
 9 #endif
10 
11 #ifdef __cplusplus
12 extern "C"
13 {
14 #endif
15 
16 namespace MathFuncs  
17 {  
18     // This class is exported from the testdll.dll  
19     // Returns a + b  
20     extern TESTDLL_API double _stdcall Add(double a, double b);
21 
22     // Returns a - b  
23     extern TESTDLL_API double _stdcall Subtract(double a, double b);
24 
25     // Returns a * b  
26     extern TESTDLL_API double _stdcall Multiply(double a, double b);
27 
28     // Returns a / b  
29     // Throws const std::invalid_argument& if b is 0  
30     extern TESTDLL_API double _stdcall Divide(double a, double b);
31 }
32 
33 #ifdef __cplusplus
34 }
35 #endif
36 
37 #endif

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

 1 // testdll.cpp : 定义 DLL 应用程序的导出函数。
 2 
 3 #include "stdafx.h"
 4 #include "testdll.h"  
 5 #include <stdexcept>  
 6 using namespace std;  
 7 
 8 namespace MathFuncs  
 9 {  
10     double _stdcall Add(double a, double b)  
11     {  
12         return a + b;  
13     }  
14 
15     double _stdcall Subtract(double a, double b)  
16     {  
17         return a - b;  
18     }  
19 
20     double _stdcall Multiply(double a, double b)  
21     {  
22         return a * b;  
23     }  
24 
25     double _stdcall Divide(double a, double b)  
26     {  
27         if (b == 0)  
28         {  
29             throw invalid_argument("b cannot be zero!");  
30         }  
31         return a / b;  
32     }  
33 }

以上是导出函数的定义。

 1 //demo.cpp
 2 #include <iostream>  
 3 #include "testdll.h"
 4 #pragma comment(lib,"testdll.lib")
 5 using namespace std;  
 6 
 7 int main()  
 8 {  
 9     double a = 7.4;  
10     int b = 99;  
11 
12     cout << "a + b = " <<  
13         MathFuncs::Add(a, b) << endl;  
14     cout << "a - b = " <<  
15         MathFuncs::Subtract(a, b) << endl;  
16     cout << "a * b = " <<  
17         MathFuncs::Multiply(a, b) << endl;  
18     cout << "a / b = " <<  
19         MathFuncs::Divide(a, b) << endl;  
20     return 0;  
21 }

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

欢迎指正!!!

posted @ 2013-06-26 17:46  瓶哥  Views(665)  Comments(0Edit  收藏  举报