实现 C调用 C++ 函数

                                                             c 调用 c++ 函数


   1. myMgr.cpp : 可以是一个普通的纯C++ 函数,

                           或者是在QT开发环境中的带有<QObject> 等头文件的C++类函数;

   2. myMidProvider.h : 利用如下格式声明即将被C调用的函数;
                   #ifdef __cplusplus
                            extern "C" {
                   #endif

                             int retrieveTopRatingApp(HitoApps_t **retList,  int iNum, int* appCount);                      

                  #ifdef __cplusplus

                             }
                 #endif

      myMidProvider.cpp : 主要是接收C函数传过来的参数,

                  按照需求将调用retrieveTopRatingApp函数的返回值用C还原.

                  如返回的是一个类,则用C语言支持的结构体存放原本类中的数据,以供C函数调用;

   3. 编辑 C++函数成.SO 文件,移动至 /usr/lib64/(lib)目录下, 

      myTest.c:包含“myMidProvider.h”头文件,即可调用定义在C++中的函数;

      (若在qt等编辑器中,在SOURCES 包含myTest.c ,在HEADERS 包含myTest.h,执行c函数调用C++函数;)




                                                               编译C++文件成.so 


   1. 普通的纯C++函数,可在终端下利用 g++ -shared -fPIC -o a.so a.cpp 编译.so;
      依赖 a.so 编译 b.so; g++ -shared -fPIC -o b.so b.cpp -la
      同时编译: g++ -shared -fPIC -o b.so a.cpp b.cpp(移动至/usr/lib(lib64))
      在终端下,编译C函数: gcc xxx.c -o test -lb
   2. 在QT中,在.pro中, 将TEMPLATE = app 改成 TEMPLATE = lib; 

      编译命令: make distclean -> qmake-qt4 xxx.pro ->将生成的一系列的libxx.so  移至/usr/lib(lib64)中;


   例子: AppCenterUtil.zip




                                                              C++调用C函数

   只需要包含对应c的头文件即可;
   如:
      extern "C"
     {
        #include "a.h"
     }

                                                                                                                                          fmoonstar 更新至2013/05/17


                                                                                                                                               

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值