MyException - 我的异常网
当前位置:我的异常网» Linux/Unix » 在Linux中将C++类转成C调用的有关问题,谢谢指点

在Linux中将C++类转成C调用的有关问题,谢谢指点

www.MyException.Cn  网友分享于:2013-03-03  浏览:9次
在Linux中将C++类转成C调用的问题,多谢指点
近日在使用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 ",因为用了就编译不过   ??)请问我这么转换有什么问题吗?多谢指点!

------解决方案--------------------
用extern C做什么?
------解决方案--------------------
在c 和c++很和使用时,extern "C "是告诉编译器,下边的是用c编写的.

文章评论

写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
我的丈夫是个程序员
我的丈夫是个程序员
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
为什么程序员都是夜猫子
为什么程序员都是夜猫子
每天工作4小时的程序员
每天工作4小时的程序员
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
Java程序员必看电影
Java程序员必看电影
漫画:程序员的工作
漫画:程序员的工作
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员都该阅读的书
程序员都该阅读的书
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
旅行,写作,编程
旅行,写作,编程
代码女神横空出世
代码女神横空出世
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我是如何打败拖延症的
我是如何打败拖延症的
那些争议最大的编程观点
那些争议最大的编程观点
中美印日四国程序员比较
中美印日四国程序员比较
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员的鄙视链
程序员的鄙视链
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员和编码员之间的区别
程序员和编码员之间的区别
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
 程序员的样子
程序员的样子
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
鲜为人知的编程真相
鲜为人知的编程真相
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
一个程序员的时间管理
一个程序员的时间管理
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有