c调用c++动态库返回std::string的问题?

zs123123 发布于 2017/11/28 18:08
阅读 273
收藏 0

testclib.cpp

#include <string>

extern "C" std::string GetVersion() {
    return std::string("11111111");
}

g++  -shared  -fPIC   ./testclib.cpp -o testclib.so

 

#include <dlfcn.h>
#include "stdio.h"
char* do_test_so_func()
{
    void* handle;
       typedef char* (*pfunc)();
    handle = dlopen("testclib.so", 1);
    pfunc fptr = (pfunc)dlsym(handle, "GetVersion");

    char* value = (*fptr)();
    printf("%s\n", value);
    return value;
}

使用C来调用,但是返回值是不对,应该怎么调用

加载中
0
qlee
qlee

C里面就没有std::string这种东西,所以返回值不能是这个类型的。

可以在GetVersion里调用malloc为字符串分配内存, 返回这片内存的地址即可。

 

 

0
l
liwenhui

你这个需求,直接返回const char*

extern "C" const char *GetVersion() {
    return "11111111";
}
返回顶部
顶部