ITPub博客

首页 > 应用开发 > > c语言调用c++类成员函数用例

c语言调用c++类成员函数用例

作者:zhjhome 时间:2019-09-11 16:02:25 0 删除 编辑

1.编写c++用例

test.h

#include<iostream>
using namespace std;
class MyClass
{
public:
    MyClass();
    ~MyClass();
    unsigned char *test(int length);

private:
    int m_key;

};

test.cpp

#include "test.h"

MyClass::MyClass()
{
   m_key=56;
}
MyClass::~MyClass()
{

}
unsigned char * MyClass::test(int length)
{
   cout<<"m_key=="<<m_key<<endl;
   length=256;
   unsigned char *p;
   p=new unsigned char[3];
   p[0]=1;
   p[1]=2;
   p[2]=3;
   return p;
}

2.编写用于c调用c++成员函数

callC.cpp

#include "test.h"
MyClass myc;
extern "C"
{
    unsigned char * callCtest(int length);
}
unsigned char * callCtest(int length)
{
    return myc.test(length);
}

3.编译c++动态库

g++ test.cpp callC.cpp -o libtest.so

4.编写main.c 调用libtest.so

main.c

#include<stdio.h>
#include<dlfcn.h>

#define LIB_PATH "/root/test/-libtest.so"
typedef unsigned char * (*CTest)(int length);
int main()
{
    
    void *handle;
    CTest ctest=NULL;
    handle=dlopen(LIB_PATH,RTLD_LAZY);
    if(!handle)
    {
        fprintf(stderr, "%s\n",dlerror() );
        return 1;
    }
    
    *(void **) (&ctest)=dlsym(handle,"callCtest");
    int len;
    unsigned char *t;
    t=ctest(len);
    printf("len===%d\n",len);
    printf("p[1]=%d\n",t[1]);
    dlclose(handle);
    return 0;
}

5.编译main.c

gcc main.c -o cmain -L. -ltest

6.运行cmain

  export LD_LIBRARY_PATH=/root/test

./cmain

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2530/viewspace-3138492/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    102
  • 访问量
    952