精华内容
下载资源
问答
  • c调用c++函数

    千次阅读 2019-01-22 10:43:23
    c调用c++普通函数 cpp_test/cpp.h #ifndef CPP_H #define CPP_H #include "extern_cpp.h" int add(int a, int b); char add(char a, char b); #endif // CPP_H cpp_test/extern_cpp.h ...
    • c调用c++普通函数
        cpp_test/cpp.h

    #ifndef CPP_H
    #define CPP_H
    
    #include "extern_cpp.h"
    
    int add(int a, int b);
    char add(char a, char b);
    
    #endif // CPP_H

        cpp_test/extern_cpp.h

    #ifndef EXTERN_CPP_H
    #define EXTERN_CPP_H
    
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    
    int add_int(int a, int b);
    char add_char(char a, char b);
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif // EXTERN_CPP_H

        cpp_test/cpp.cpp

    #include "cpp.h"
    
    #include <iostream>
    
    int add(int a, int b)
    {
        std::cout << "int a+b=" << a+b << std::endl;
        return a+b;
    }
    
    char add(char a, char b)
    {
        std::cout << "char a+b=" << a+b << std::endl;
        return a+b;
    }
    
    int add_int(int a, int b)
    {
        return add(a,b);
    }
    
    char add_char(char a, char b)
    {
        return add(a,b);
    }

        c_test/main.c

    #include <stdio.h>
    
    #include "../cpp_test/extern_cpp.h"
    
    int main(int argc, char *argv[], char *env[])
    {
        printf("%d\n", add_int(2,3));
        printf("%c\n", add_char(20, 30));
    
        return 0;
    }

    编译 g++ -c cpp.cpp       
        gcc main.c ../cpp_test/cpp.o -lstdc++

    • c调用c++类函数
         cpp_test/cpp.h

    #ifndef CPP_H
    #define CPP_H
    
    #include "extern_cpp.h"
    
    struct example
    {
    public:
        example(void);
        example(int i, int j);
        ~example(void);
        int add(void);
        int a,b;
    };
    
    #endif // CPP_H

        cpp_test/extern_cpp.h

    #ifndef EXTERN_CPP_H
    #define EXTERN_CPP_H
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    typedef struct example example;
    example* exmaple_create(int a, int b);
    void example_delete(example* e);
    int example_add(example* e);
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif // EXTERN_CPP_H

        cpp_test/cpp.cpp

    #include "cpp.h"
    #include <iostream>
    example::example(void){}
    example::example(int i, int j):a(i),b(j){}
    example::~example(void){}
    
    int example::add(void)
    {
        std::cout << "a+b=" << a+b << std::endl;
        return a+b;
    }
    
    example* exmaple_create(int a, int b)
    {
        return new example(a, b);
    }
    
    void example_delete(example* e)
    {
        delete e;
    }
    
    int example_add(example* e)
    {
        return e->add();
    }

        c_test/main.c
    #include <stdio.h>
    #include "../cpp_test/extern_cpp.h"
    
    int main(int argc, char *argv[], char *env[])
    {
        example *e = exmaple_create(2, 3);
        printf("%d\n", example_add(e));
        example_delete(e);
    
        return 0;
    }
    编译 g++ -c cpp.cpp

            gcc main.c ../cpp_test/cpp.o -lstdc++


    展开全文
  • http://blog.163.com/n_wangyi/blog/static/15747840720108382029367/c++调用c函数:在c函数声明前加extern "c"c调用c++函数:在c++函数实现前后添加extern "C"{ //int fun(){} }

    http://blog.163.com/n_wangyi/blog/static/15747840720108382029367/

     

    c++调用c函数:在c函数声明前加extern "c"

     

    c调用c++函数:在c++函数实现前后添加extern "C"{ //int fun(){} }

    展开全文
  • 实现 C调用 C++ 函数

    2013-04-11 18:13:20
    c 调用 c++ 函数  1. myMgr.cpp : 可以是一个普通的纯C++ 函数,  或者是在QT开发环境中的带有 等头文件的C++函数;... myMidProvider.h : 利用如下格式声明即将被C调用函数;  #ifdef __cplusplus

                                                                 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


                                                                                                                                                   

    展开全文
  • C调用C++函数接口

    2014-03-27 18:47:30
    C调用C++函数接口 如果使用C++写了一些供外部(C/C++)调用的接口,那么最好这样声明函数 /* C++ code */ /* add.h */ #ifndef _ADD_H_ #define _ADD_H_ #ifdef __cplusplus extern "C" { #endif int...

    C调用C++函数接口

    如果使用C++写了一些供外部(C/C++)调用的接口,那么最好这样声明函数


    /* C++ code */
    /* add.h */
    #ifndef _ADD_H_
    #define _ADD_H_
    #ifdef __cplusplus
    extern "C" {
    #endif

    int add(int a, int b);

    #ifdef __cplusplus
    }
    #endif

    #endif /* _ADD_H_ */

    这样使用C语言调用时就不需要担心什么了。

    /* C code */
    /* main.c */
    #include "add.h"

    int main()
    {
    int a = 10, b = 12;
    int c = add(a, b);
    return c;
    }


    展开全文
  • 1、C调用C++ 本文给出了一种方法。基本思想是,写一个 wrapper文件,把 C++类封装起来,对外只提供C语言的接口,和 C++i相关的都在 wrapper的实现文件里实现。 //------apple.h #ifndef __APPLE_H__ #define __...
  • 声明:引用两处博客 http://blog.csdn.net/lg1259156776/ ... ...C调用C++,使用extern “C”则是告诉编译器依照C的方式来编译封装接口,当然接口函数里面的C++语法还是按C++方式编译。 使用extern
  • 首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。   通常,在模块的头文件中对本模块提供给其它模块引用的...
  • extern "C" 这个东西不知道在书上和别人的代码里看到过多少次了,但是就是从来没有好好了解过,结果有一次项目对接问题...情况是这样的:我用C++代码写了大一堆东西,然后我要把自己写的东西生成一个动态库给别人调用
  • 注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反。集成开发环境如VC++6.0或者vs都是以文件后缀来区别当前要编译的是C代码还是C++代码,然后采用响应的编译、调用协议等。一,C和C++...
  • C调用C++函数与C++中调用C函数

    千次阅读 2017-09-21 16:53:00
    C调用C++函数 将 C++ 函数声明为``extern "C"''(在C++ 代码里做这个声明),然后调用它(在 C 或者 C++ 代码里调用)。例如: // C++ code: extern "C" void f(int); void f(int
  • C中如何调用C++函数

    2019-11-27 13:28:44
    前阵子被问及一个在C中如何调用C++函数的问题,当时简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下。...
  • C调用C++函数

    2012-05-08 15:12:59
    C调用C++函数(非成员函数) 如果我们的C++函数有个C连接符(extern “C”),它可以被C编译器编译过的C函数直接调用。被C连接符声明过的C++函数可以拥有C++的一切特征,但是如果我们想在C中调用这个函数,他的...
  • C中如何调用C++函数?

    千次阅读 2016-08-08 09:32:13
    C中如何调用C++函数   C中如何调用C++函数?   前阵子被问及一个在C中如何调用C++函数的问题,当时简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上...
  • c调用c++函数

    2013-12-18 14:54:56
    C++ 函数声明为``extern "C"''(在你的 C++ 代码里做这个声明),然后调用它(在你的 C 或者 C++ 代码里调用)。例如: // C++ code: extern "C" void f(int); void f(int i) {  // ... }   然后,你...
  • C中如何调用C++函数、类内函数

    千次阅读 2015-01-01 09:06:46
    C中如何调用C++函数、类内函数 在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来...
  • C 函数中调用 C++函数

    2007-05-25 17:59:00
    C 函数中调用 C++函数 elf1980 发表于 2006-
  • C程序调用C++函数

    千次阅读 2009-12-23 16:02:00
    这种需求应该就没C++程序调用C函数需求多了.目前的实现基本只有一类方法,即通过处理被调用的C++文件....这里是针对调用C++的成员函数的实现. aa.hclass AA { int i; public: int ThisIsTest(int a,
  • C++的头文件中:需要包含: #ifdef __cplusplus extern "C" { #endif const char *dmNmsAgentGetFirstPeerId(); const char *dmNmsAgentGetNextPeerId();...在C++的cpp文件中需要包含该函数的实现: cons

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,370
精华内容 7,348
关键字:

c调用c++函数

c++ 订阅