动态链接库是如何建立的(2)

9 篇文章 0 订阅

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
{
    publicvoid 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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值