| 发表于: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 ",因为用了就编译不过 ??)请问我这么转换有什么问题吗?多谢指点! |
|
|
|
|