Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1159673
  • 博文数量: 139
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1712
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 23:10
个人简介

每天进步一点点。

文章分类

全部博文(139)

文章存档

2015年(3)

2014年(11)

2013年(25)

2011年(1)

2009年(3)

2008年(29)

2007年(45)

2006年(22)

分类: Windows平台

2013-12-21 17:32:06

当涉及到C和C++相互调用时。一般来说,将需要对外供调用的函数的声明写到一个头文件当中,然后相应的实现封装成为一个动态链接库或者静态库是一个比较好的方法。

1.C++调用C函数
在提供对外声明的头文件当中,添加关键字extern “C”。
extern “C”
{
#include “ myFunc_Api.h”

extern void My_Funcc(int a,int b, int c);

};

不过如果写成上面那样,这个函数就只有c++程序可以调用了,C程序反而无法调用。所以最好的办法就在C++调用时才加上extern "C".
这个时候,可以使用宏定义: __cplusplus,这个宏定义在C++编译时才会有,而在C程序中没有。所以C/C++都可以调用的头文件应该写成下面这样。
#ifdef __cplusplus
extern "C" {
#endif
#include “ myFunc_Api.h”

extern void My_Funcc(int a,int b, int c);

#ifdef __cplusplus
 {
#endif

2.C程序调用C++函数
要让C++程序可以被C程序调用,需要在C++函数的函数定义处添加上extern "C",然后在对外声明的头文件中按照C函数的形势声明即可。需要注意的时,这些函数的形参和返回值应该是基本的C语言数据类型,不能是C++当中的类的引用之类的。

extern "C" void My_CppFunc(int a,float b,char c)
{

}
阅读(1773) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~