Windows静态库用C++代码调用C语言的旧库方法extern”c“-创新互联

静态库特点
运行不存在
静态库源码被链接到调用程序中
目标程序的归档
C语言静态库
C静态库的创建
1.创建一个静态库项目
2.添加库程序,源文件使用C文件
C静态库的使用
库路径设置:可以使用pragma关键字设置
#pragma comment(lib,“./lib/clib.lib”)
C语言方法

创新互联公司是专业的雄县网站建设公司,雄县接单;提供网站设计制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行雄县网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
//clib.c
int Clib_add(int x,int y)
{return x+y;
}
int Clib_sub(int x,int y)
{return x - y;
}
//useclib.c
#include#include#pragma comment(lib,"../debug/Clib.lib")
int main()
{int sum = 0;
	int sub = 0;
	sum = Clib_add(5,3);
	sub = Clib_sub(5,3);

	printf("sum = %d\nsub = %d\n",sum,sub);
	system("pause");

	return 0;
}

C语言函数名:_Clib_add和_Clib_sub
在这里插入图片描述
C++方法

//cpplib.cpp
int Clib_add(int x,int y)
{return x+y;
}
int Clib_sub(int x,int y)
{return x - y;
}
//usecpplib.cpp
#include#include#pragma comment(lib,"../debug/cpplib.lib")

int Clib_add(int,int);
int Clib_sub(int,int);
int main()
{int sum = 0;
	int sub = 0;
	sum = cpplib_add(5,3);
	sub = cpplib_sub(5,3);

	printf("sum = %d\nsub = %d\n",sum,sub);
	system("pause");

	return 0;
}

以上代码的区别在于C语言不需要函数声明,但C++使用函数前需要声明
C++语言函数名:?Clib_add@@YAHHH@Z和?Clib_sub@@YAHHH@Z
在这里插入图片描述
如果用c++程序调用C语言的静态库
原因是之前上学的时候老师讲过一个段子:
现在我们要破解一个芯片代码,我们有的源码是C语言的,三十多看前的代码了,现在公司的代码都是用C++写的,咋办,把以前的方法都用C++来实现一遍?可以,有源代码就可以,稍微花点时间就可以完成,不幸的是,写源代码的公司倒闭了,比较Bland公司,以前的代码丢失了,咋办?难道原来的lib静态库都不能用了么?
C++调用C语言的静态库时会报错
在这里插入图片描述
方法在这里
extern “c”
{
int Clib_add(int,int);
int Clib_sub(int,int);
}

#include#include#pragma comment(lib,"../debug/clib.lib")

extern "C" 
{int Clib_add(int,int);
	int Clib_sub(int,int);
}
int main()
{int sum = 0;
	int sub = 0;
	sum = Clib_add(5,3);
	sub = Clib_sub(5,3);

	printf("sum = %d\nsub = %d\n",sum,sub);
	system("pause");

	return 0;
}

另外,多说一句,C语言调函数时,只检查函数名正确就可以调用,因为C++有重载的概念,所以不但要检查函数名,还要检查函数的参数类型,导致函数在静态库中被调用时,无法正常使用只包含文件名信息的库文件。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站标题:Windows静态库用C++代码调用C语言的旧库方法extern”c“-创新互联
链接URL:http://azwzsj.com/article/ccoido.html