动态链接库是如何建立的(2)
2016-04-29 18:40
495 查看
1.不采用def文件的形式创建动态链接库 (基础)
点击此处查看我的另一篇博客:采用def文件创建动态链接库过程1
(1)创建新的DLL项目 命名DLL
(2)添加cpp文件 命名Dll.cpp
加入了_declspec(dllexport)表明add 和 subtract 为导出函数
对于_stdcall,读者可以自行测试,并查阅相关的资料
_declspec(dllexport) int /*_stdcall*/ add(int a, int b) { return a + b; } _declspec(dllexport) int /*_stdcall*/ subtract(int a, int b) { return a - b; }
过程2
(1)新建一个检测函数TestDll
(2)添加.cpp文件 TestDll.cpp
(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中
#include <iostream> using namespace std; #pragma comment(lib,"Dll.lib") //extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport) //extern add(int a, int b); //extern subtract(int a, int b); _declspec(dllimport) add(int a, int b); _declspec(dllimport) subtract(int a, int b); #define OK 0 #define ERR -1 int main() { int a = 100, b = 40; cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl; cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl; system("pause"); return OK; }
2.不采用def文件的形式创建动态链接库 (进阶1)
过程1(1)创建新的DLL项目 命名DLL
(2)添加cpp文件 命名Dll.cpp
_declspec(dllexport) int /*_stdcall*/ add(int a, int b) { return a + b; } _declspec(dllexport) int /*_stdcall*/ subtract(int a, int b) { return a - b; }
(3)添加h文件 命名Dll.h
此时只是给客户端使用的,即TestDll使用的,所以用_declspec(dllimport),表明是导入
_declspec(dllimport) int /*_stdcall*/ add(int a, int b); _declspec(dllimport) int /*_stdcall*/ subtract(int a, int b);
过程2
(1)新建一个检测函数TestDll
(2)添加.cpp文件 TestDll.cpp
(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中
(4)#include “*/Dll.h”//加上之后才可以
#include <iostream> #include "*/Dll.h"//加上之后才可以 using namespace std; #pragma comment(lib,"Dll.lib") //extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport) //extern add(int a, int b); //extern subtract(int a, int b); //_declspec(dllimport) add(int a, int b); //_declspec(dllimport) subtract(int a, int b); #define OK 0 #define ERR -1 int main() { int a = 100, b = 40; cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl; cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl; system("pause"); return OK; }
3.不采用def文件的形式创建动态链接库 (进阶2)
过程1(1)创建新的DLL项目 命名DLL
(2)添加cpp文件 命名Dll.cpp
#define DLL_API _declspec(dllexport) #include "Dll1.h" int /*_stdcall*/ add(int a, int b) { return a + b; } int /*_stdcall*/ subtract(int a, int b) { return a - b; }
(3)添加h文件 命名Dll.h
#ifdef DLL_API #else #define DLL_API _declspec(dllimport) #endif DLL_API int /*_stdcall*/ add(int a, int b); DLL_API int /*_stdcall*/ subtract(int a, int b);
过程2
(1)新建一个检测函数TestDll
(2)添加.cpp文件 TestDll.cpp
(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中
(4)#include “*/Dll.h”//加上之后才可以
#include <iostream> #include "*/Dll.h"//加上之后才可以 using namespace std; #pragma comment(lib,"Dll.lib") //extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport) //extern add(int a, int b); //extern subtract(int a, int b); //_declspec(dllimport) add(int a, int b); //_declspec(dllimport) subtract(int a, int b); #define OK 0 #define ERR -1 int main() { int a = 100, b = 40; cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl; cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl; system("pause"); return OK; }
4.不采用def文件的形式创建动态链接库 (进阶3)
过程1(1)创建新的DLL项目 命名DLL
(2)添加cpp文件 命名Dll.cpp
#define DLL_API extern "C" _declspec(dllexport)//注意C要大写 #include "Dll1.h" int /*_stdcall*/ add(int a, int b) { return a + b; } int /*_stdcall*/ subtract(int a, int b) { return a - b; }
(3)添加h文件 命名Dll.h
#ifdef DLL_API #else #define DLL_API extern "C" _declspec(dllimport) #endif DLL_API int /*_stdcall*/ add(int a, int b); DLL_API int /*_stdcall*/ subtract(int a, int b);
过程2
(1)新建一个检测函数TestDll
(2)添加.cpp文件 TestDll.cpp
(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中
(4)#include “*/Dll.h”//加上之后才可以
#include <iostream> #include "*/Dll.h"//加上之后才可以 using namespace std; #pragma comment(lib,"Dll.lib") //extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport) //extern add(int a, int b); //extern subtract(int a, int b); //_declspec(dllimport) add(int a, int b); //_declspec(dllimport) subtract(int a, int b); #define OK 0 #define ERR -1 int main() { int a = 100, b = 40; cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl; cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl; system("pause"); return OK; }
5.不采用def文件的形式创建动态链接库 (进阶4)
过程1(1)创建新的DLL项目 命名DLL
(2)添加cpp文件 命名Dll.cpp
#define DLL_API _declspec(dllexport) #include "Dll1.h" DLL_APPI int /*_stdcall*/ add(int a, int b) { return a + b; } DLL_API int /*_stdcall*/ subtract(int a, int b) { return a - b; } void Line:: output() { cout<<"void Line:: output()"<<endl; } void Line::test() { cout<<"void Line::test()"<<endl; }
(3)添加h文件 命名Dll.h
#ifdef DLL_API #else #define DLL_API _declspec(dllimport) #endif int /*_stdcall*/ add(int a, int b); int /*_stdcall*/ subtract(int a, int b); class DLL_API Line { public: void output(); void test(); }
过程2
(1)新建一个检测函数TestDll
(2)添加.cpp文件 TestDll.cpp
(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中
(4)#include “*/Dll.h”//加上之后才可以
#include <iostream> #include "*/Dll.h"//加上之后才可以 using namespace std; #pragma comment(lib,"Dll.lib") //extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport) //extern add(int a, int b); //extern subtract(int a, int b); //_declspec(dllimport) add(int a, int b); //_declspec(dllimport) subtract(int a, int b); #define OK 0 #define ERR -1 int main() { int a = 100, b = 40; cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl; cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl; Line line; line.output(); line.test(); system("pause"); return OK; }
相关文章推荐
- extern "c"
- 模拟大华或海康相机的循环&&动态链接库的形式实现&&回调函数的使用
- extern "C"的用法解析
- extern "c"用法解析
- extern c 解释
- gcc和g++编译器
- C++动态库(Dll)的制作,导出类
- C语言中extern关键字的正确使用
- 导出函数__declspec(dllexport)
- extern "c"{}
- extern "c"用法解析
- 在ObjectARX的类定义中使用__declspec(dllimport)的危险
- __declspec关键字详细用法
- [转]c++ 中__declspec 的用法
- 动态链接库是如何建立的(3)如何查看到导出了那些函数?如何查看导入了哪些函数?
- C++ 修饰符const、static、extern、ref、volatile、explicit总结
- extern "c"用法解析
- c++动态链接库的创建和使用
- C/C++混合编程--extern “C” 使用方法详解
- C语言 extern 数组