Windows静态库用C++代码调用C语言的旧库方法extern”c“-创新互联
静态库特点
运行不存在
静态库源码被链接到调用程序中
目标程序的归档
C语言静态库
C静态库的创建
1.创建一个静态库项目
2.添加库程序,源文件使用C文件
C静态库的使用
库路径设置:可以使用pragma关键字设置
#pragma comment(lib,“./lib/clib.lib”)
C语言方法
//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“-创新互联
分享网址:http://ybzwz.com/article/ccoido.html