**
通过封装使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