您的位置:程序门 -> linux/unix社区 -> 程序开发区



在linux中将c++类转成c调用的问题,多谢指点


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


在linux中将c++类转成c调用的问题,多谢指点[已结贴,结贴人:howzmh]
发表于:2007-07-10 09:11:17 楼主
近日在使用linux编程中有了一个问题。
原来在windows下的vc中写了一个程序,主要是由一些类(类a,b,c,其中类a是用户接口类)实现的功能。现在将主要的功能移到linux下,并且可以被c语言调用。
第一步做的移植是在linux下仍使用c++,将功能类a,b,c编译成.so文件,在c++测试程序中直接使用类a,运行正常;
第二步是向c移植,新建一些函数,这些函数用来包装类的构造、类函数的调用和类的析构,以供c程序调用。编译好.so后,当运行到类中的功能的时候,总是报“段错误”,通过修改程序的参数,绕过出错的地方,结果在别的地方错误。经检查发现错误是因为某些指针的值意外的变成0了(初始化的时候还是正确的值)。由此怀疑是c++向c转换封装的时候做的不对。请教大家应该怎么做:
其中封装c++类的文件:
#include   <stdio.h>
#include   "a.h "
extern   "c "{
typedef   int   chandle;
#define   maxnum   100
#include   "head.h "

int   index=0;
a   *a[maxnum];
//建立对象
chandle   creatnewclassify()
{

if(classifyindex==maxnum)//申请数量已经满了
return   maxnum;

a[index]=new   a;

classifyindex++;
return   classifyindex-1;
}
//调用类的方法
int   classify(chandle   handle,unsigned   char*   p_ip,unsigned   int   u_length,ruleno   *rulenoresult)
{

a[handle]-> newip(p_ip,u_length);

a[handle]-> classify();

return   0;
}

//析构
int   deleteclassify(chandle   handle)
{

if(handle <0   ¦ ¦   handle   > =maxnum)
return   -1;
if(a[handle]==null)
return   -2;
delete   a[handle];
a[handle]=null;
return   0;

}
}//end   extern   "c "
在测试程序中,声明了上面三个函数(但是没有使用extern "c ",因为用了就编译不过   ??)请问我这么转换有什么问题吗?多谢指点!
发表于:2007-07-10 09:52:081楼 得分:5
用extern   c做什么?
发表于:2007-07-10 10:18:072楼 得分:0
:dai_weitao(疯狂linux   c++)  
是想让c语言的程序也能使用这个.so。c语言中不能使用这个库中的类呀
发表于:2007-07-10 10:24:543楼 得分:15
在c   和c++很和使用时,extern   "c "是告诉编译器,下边的是用c编写的.


快速检索

最新资讯
热门点击