通过封装使C、C++项目提供给其他用户使用(详细)

**

通过封装使C、C++项目提供给其他用户使用

**

将要了解的内容:

_declspec(dllexport)

__declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等。
原文链接:https://blog.csdn.net/fengbingchun/article/details/78825004/
**

_stdcall**

在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。在参数传递中,有两个很重要的问题必须得到明确说明:当参数个数多于一个时,按照什么顺序把参数压入堆栈函数调用后,由谁来把堆栈恢复原装。在高级语言中,通过函数调用约定来说明这两个问题。
常见的调用约定有:stdcall,cdecl,fastcall,thiscall,nakedcall
stdcall调用约定声明的语法为:
返回值 _stdcall 函数名(参数列表
stdcall的调用约定意味着:1)参数从右向左压入堆栈,2)函数自身修改堆栈 3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸。
原文链接:
https://www.cnblogs.com/songfeixiang/p/3733661.html
**

pragma comment 的使用**

我们经常用到的是#pragma comment(lib,"*.lib")这类的。
#pragma comment(lib,“Ws2_32.lib”)表示链接Ws2_32.lib这个库。
和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的
程序别人在使用你的代码的时候就不用再设置工程settings了
原文链接:
https://blog.csdn.net/qq_28351609/article/details/84570591

一、C++的封装形式

1、首先定义头文件和程序代码
在这里插入图片描述

//Point头文件
#pragma once
#define POINT_API _declspec(dllexport) 
class POINT_API Point
{
public:
	Point();
	Point(double X, double Y);
	double GetX();
	double GetY();
	void SetX(double X);
	void SetY(double Y);
	Point operator=(Point P);
	Point operator+(Point p);
	Point operator-(Point p);
private:
	double x;
	double y;
};
//Point.h具体内容
#include "Point.h"
Point::Point() {}
Point::Point(double X, double Y)
{
	x = X;
	y = Y;
}
double Point::GetX()
{
	return x;
}
double Point::GetY() 
{
	return y;
}
void Point::SetX(double X)
{
	x = X;
}
void Point::SetY(double Y)
{
	y = Y;
}
Point Point::operator=(Point P)
{
	x = P.x;
	y = P.y;
	return *this;
}
Point Point::operator+(Point p)
{
	this->x += p.x;
	this->y += p.y;
	return *this;
}
Point Point::operator-(Point p)
{
	this->x -= p.x;
	this->y -= p.y;
	return *this;
}

2、点击属性
在这里插入图片描述

3、点击配置类型中的静态库(.lib) ,并点击确定
在这里插入图片描述
4、点击重新生成
在这里插入图片描述
出现以下内容,说明生成成功
在这里插入图片描述
5、再次点击属性,点击配置列表,选择动态库(.dll),点击确定,点击重新生成,出现以下内容表示生成成功
在这里插入图片描述
6、找到该项目所在文件夹,并将 .h .dll .lib 文件复制到同一文件夹下
在这里插入图片描述
7、将该文件夹拷贝到,想要用此头文件的项目文件目录下

在这里插入图片描述
8、进入属性、VC++目录 点击库目录 编辑
在这里插入图片描述
在这里插入图片描述
点击这个图标,并点击 … 双击POINT 文件
在这里插入图片描述
在这里插入图片描述
点击选择文件夹,然后点击确定
在这里插入图片描述
点击属性 、链接器、输入、附加依赖项,将你的 .lib文件名称写上即可
在这里插入图片描述
回到主界面,就可以正常使用该头文件了
在这里插入图片描述
**

二、C的封装形式

1、创建头文件以及源程序

//头文件
//#pragma once   
#ifndef BIDAXIAO_H
#define BIDAXIAO_H
#define YXTWH_API _declspec(dllexport)

#ifdef _cplusplus
extern "C"
{
#endif
	YXTWH_API int _stdcall II_MAX(int a, int b);

	YXTWH_API int _stdcall II_MIN(int a, int b);

	YXTWH_API int _stdcall III_MAX(int a, int b, int c);

#ifdef _cplusplus
}
#endif
#endif // POINT_H

**

#include "BIDAXIAO.h"

int _stdcall III_MAX(int a, int b, int c)
{
	a = a > b ? a : b;
	a = a > c ? a : c;
	return a;

}
int _stdcall II_MAX(int a, int b)
{
	return a > b ? a : b;
}
int _stdcall II_MIN(int a, int b)
{
	return a < b ? a : b;
}

//需要注意的是,这里要加上 _stdcall ,否则会出现以下内容,使包含此头文件的程序无法运行
在这里插入图片描述
C语言和C++的过程,除了代码的不同,其他步骤都是相同的
到此就结束了,若还有不清楚的地方,可以参看视频:
https://www.bilibili.com/video/BV1tA411N7HB?p=2&share_source=copy_web

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值