jquery 特效 网站,saas建站平台有哪些,陕西省建设厅网站安全员报名,ppt怎么做流程图文章目录1 C 静态库.lib 生成1.1 静态库lib的生成方法和使用方法1.2 创建静态库项目1.3 编写.h 和 .cpp文件1.4 设置 及 生成 DLL2 调用 C 静态库lib2.1 新建LIBtest及测试代码2.2 静态库配置 及代码调用测试3 实际项目中的使用技巧、及通用设置3.1 设置lib输出路径3.2 设置头文…
文章目录1 C 静态库.lib 生成1.1 静态库lib的生成方法和使用方法1.2 创建静态库项目1.3 编写.h 和 .cpp文件1.4 设置 及 生成 DLL2 调用 C 静态库lib2.1 新建LIBtest及测试代码2.2 静态库配置 及代码调用测试3 实际项目中的使用技巧、及通用设置3.1 设置lib输出路径3.2 设置头文件引入路径3.3 改进后 测试4 完整代码.h文件、.cpp 文件5 完整项目文件下载1 C 静态库.lib 生成
C 静态库.lib 生成 和 C 动态库.dll生成方法基本一样【08】C实战篇——C 生成动态库.dll 及 C调用DLL及实际项目中的使用技巧
不同的就是 配置类型--动态库( .dll) 改为 配置类型--静态库(.lib)
为了验证效果使用三种方法导出函数
//导出函数//导出类//以C方式导出函数
1.1 静态库lib的生成方法和使用方法
创建静态库lib
创建静态库lib:1.VS创建C 空项目MyLIB:编写.h和.cpp文件在.h文件中宏定义导出图数2.生成1ib文件:右键项目--属性--配置类型--静态库(.lib)以Debug x64 生成解决方案使用静态库lib
VS创建C 空项目LIBtest使用静态库lib:隐式调用1.把.lib(MyLIB.lib)、.h(mathTest.h)文件放到工程目录下LIBtest项目的.cpp同目录下2.项目右键-- 属性--配置属性--链接器--输入-附加依项-- 添加MyLIB.lib3.#include mathTest.h4.代码调用1.2 创建静态库项目
1.VS创建C 空项目MyLIB
1.3 编写.h 和 .cpp文件
添加 mathTest.h 和 mathTest.cpp文件
mathTest.h
#pragma once
#ifndef MATHTEST_H
#define MATHTEST_H//宏定义导出
#ifndef MATHTEST_ //如果没有定义 MATHTEST_就定义MATHTEST_API __declspec(dllexport)
#define MATHTEST_API __declspec(dllexport) //导出
#else
#define MATHTEST_API __declspec(dllimport) //导入
#endif//导出函数
MATHTEST_API int add(int a, int b);//加法
MATHTEST_API int subtract(int a, int b);//减法//导出类
class MATHTEST_API mathTest
{public:int multiply(int a, int b);//乘法int divide(int a, int b);//除法
};//以C方式导出函数
//extern C,告诉编译器这里是C语言代码//为了使自己建的库可以在 C/C 通用调用使用 __cplusplus
//当C调用代码时__cplusplus 值为1,声明函数外面就加了一层“extern C {}”
//当C 调用代码时__cplusplus 值为0就相当于没有“extern C {}”#ifdef __cplusplus
extern C
{
#endifMATHTEST_API int Cadd(int a, int b);//加法MATHTEST_API int Csubtract(int a, int b);//减法
#ifdef __cplusplus
}
#endif#endifmathTest.cpp
#include mathTest.h/*创建静态库lib:1.VS创建C 空项目MyLIB:编写.h和.cpp文件在.h文件中宏定义导出图数2.生成1ib文件:右键项目--属性--配置类型--静态库(.lib)以Debug x64 生成解决方案
*///导出函数
int add(int a, int b)//加法
{return a b;
}
int subtract(int a, int b)//减法
{return a - b;
}//导出类
int mathTest::multiply(int a, int b)//乘法
{return a * b;
}int mathTest::divide(int a, int b)//除法
{return a / b;
}//以C方式导出函数
//extern C,告诉编译器这里是C语言代码
int Cadd(int a, int b)//加法
{return a b;
}int Csubtract(int a, int b)//减法
{return a - b;
}1.4 设置 及 生成 DLL
右键项目–属性–配置类型–静态库( .lib)
右键项目–生成 如修改后可以点重新生成
成功 查看 生成的lib文件
2 调用 C 静态库lib
VS创建C 空项目LIBtest使用静态库lib:隐式调用1.把.lib(MyLIB.lib)、.h(mathTest.h)文件放到工程目录下LIBtest项目的.cpp同目录下2.项目右键-- 属性--配置属性--链接器--输入-附加依项-- 添加MyLIB.lib3.#include mathTest.h4.代码调用2.1 新建LIBtest及测试代码
右键“解决方案MyLIB”新建C 空项目LIBtest
在项目中添加main.cpp文件及代码
#includeiostream
#includemathTest.h
using namespace std;/*
VS创建C 空项目LIBtest使用静态库lib:隐式调用1.把.lib(MyLIB.lib)、.h(mathTest.h)文件放到工程目录下LIBtest项目的.cpp同目录下2.项目右键-- 属性--配置属性--链接器--输入-附加依项-- 添加MyLIB.lib3.#include mathTest.h4.代码调用
*/int main()
{//调用dll导出的函数int sum add(10, 5);int sub subtract(10, 5);//调用dll导出的类成员函数mathTest mathT; //实例化对象int mul mathT.multiply(10, 5);int div mathT.divide(10, 5);//调用以C方式导出的函数int Csum Cadd(10, 5);int Csub Csubtract(10, 5);cout 我的静态库.lib调用 endl;cout add(10,5) sum endl subtract(10,5) sub endl multiply(10,5) mul endl divide(10,5) div endl Cadd(10,5) Csum endl Csubtract(10,5) Csub endl;return 0;
}2.2 静态库配置 及代码调用测试
使用静态库lib:隐式调用1.把.lib(MyLIB.lib)、.h(mathTest.h)文件放到工程目录下LIBtest项目的.cpp同目录下2.项目右键-- 属性--配置属性--链接器--输入-附加依项-- 添加MyLIB.lib3.#include mathTest.h4.代码调用项目右键-- 属性–配置属性–链接器–输入-附加依项-- 添加MyLIB.lib 将LIBtest“设为启动项”
方法参考下图 调用测试成功
导出函数、导出类成员函数、以C方式导出的函数现在这三种函数都用结果都输出了说明这三种dll导出函数方式都有但我们最常用的是 以C方式导出的函 这中通用个避免出错。
3 实际项目中的使用技巧、及通用设置
lib、.h复制到 测试项目的.cpp目录下太麻烦下面使用自动路径
删掉LIBtest目录下上一次的操作文件 1.把.lib(MyLIB.lib)、.h(mathTest.h)文件放到工程目录下LIBtest项目的.cpp同目录下
3.1 设置lib输出路径
直接将lib生成文件的生路径设为 “LIBtest”项目下的.cpp路径
为了是的路径通用这里使用相对路径 ../LIBtest/ 并且将 MyLIB 设为启动项设置后需要重新生成lib。
可见新的dll文件已经 生成在LIBtest项目下面了 3.2 设置头文件引入路径
将LIBtest设为启动项 设置LIBtest项目的 附加包含目录为 ../MyLIB/这样LIBtest项目就可以访问 mathTest.h 文件了。 3.3 改进后 测试
再次测试 OK 注意既然新的dll生成路径已经更改到 “LIBtest”项目下的.cpp路径那么第一次在 MyLIB\x64\Debug\路径下生成的生成的lib最好删掉
不然两个路径同时存在lib调用时会产生混淆当两个路径下的lib代码源文件完全一样时似乎并没有影响。一旦新的lib代码修改了这时两个路径下lib内容不一致调用运行时就会出错。
所以下面路径的3文件删掉。
4 完整代码.h文件、.cpp 文件
为了统一规范同时使用“以C语言的方式导出函数”
导出函数、导出类成员函数、以C方式导出的函数现在这三种函数都用结果都输出了说明这三种dll导出函数方式都有但我们最常用的是 以C方式导出的函 这种通用个避免出错。
mathTest.h文件
#pragma once
#ifndef MATHTEST_H
#define MATHTEST_H//宏定义导出
#ifndef MATHTEST_ //如果没有定义 MATHTEST_就定义MATHTEST_API __declspec(dllexport)
#define MATHTEST_API __declspec(dllexport) //导出
#else
#define MATHTEST_API __declspec(dllimport) //导入
#endif//以C方式导出函数
//extern C,告诉编译器这里是C语言代码//为了使自己建的库可以在 C/C 通用调用使用 __cplusplus
//当C调用代码时__cplusplus 值为1,声明函数外面就加了一层“extern C {}”
//当C 调用代码时__cplusplus 值为0就相当于没有“extern C {}”#ifdef __cplusplus
extern C
{
#endifMATHTEST_API int Cadd(int a, int b); //加法MATHTEST_API int Csubtract(int a, int b);//减法MATHTEST_API int Cmultiply(int a, int b); //乘法MATHTEST_API int Cdivide(int a, int b); //除法#ifdef __cplusplus
}
#endif#endif
mathTest.cpp文件
#include mathTest.h/*创建静态库lib:1.VS创建C 空项目MyLIB:编写.h和.cpp文件在.h文件中宏定义导出图数2.生成1ib文件:右键项目--属性--配置类型--静态库(.lib)以Debug x64 生成解决方案
*///以C方式导出函数int Cadd(int a, int b)//加法
{return a b;
}
int Csubtract(int a, int b)//减法
{return a - b;
}int Cmultiply(int a, int b)//乘法
{return a * b;
}int Cdivide(int a, int b)//除法
{return a / b;
}
5 完整项目文件下载
完整项目工程文件下载后可直接编译运行 C 生成静态库.lib 及 C调用lib