从C中删除C ++ lib,然后使用带有函数

时间:2017-05-13 20:07:53

标签: android c++ c linux string

所以我在我的C代码中成功使用了dlload来获取一个在Android和Android中用C ++编写的库的句柄 然后我用 dlsym(handle_from_dlload, "function name as string"); 对于构造函数

然后我可以通过调用我自己的typedef' ed MyCreate来使用这个构造函数,没有问题可以正常工作。例如 void* myhandle = malloc(16); MyCreate(myhandle, 1);

这是在我的C代码中定义的 typedef void (*MyCreate)(void *handle, uint32_t nbr) 并在C ++中使用此签名 OtherClassInLib::OtherClassInLib(uint32_t nbr)

但是还有一个构造函数采用C ++ std::string

我已经在我的C代码中声明了这一点 typedef void (*MyCreate2)(void *handle, uint32_t nbr, void* isVoidStarCorrectHere) 在C ++中有这个签名 OtherClassInLib::OtherClassInLib(uint32_t nbr, std::string astring)

如何使用字符串调用此构造函数,例如"你好"从C作为字符串是一个对象? 我尝试了各种各样的方法,比如char *或char []和malloced内存,但总是一样,崩溃?

我似乎无法访问#include,并且带有std :: string的构造函数/函数已成功加载了dlsym。 我的C ++真的很生疏,所以我很感激帮助理解这一点。

1 个答案:

答案 0 :(得分:0)

我的解决方案是用C ++编写一个包装器,这是一种明智和正确的方法。我无法像.select("ID", "review")那样得到任何C ++标题的原因基本上就是我没有把stl" stlport_static"在gradle中

当这工作时,很容易使用std :: string正确声明签名并使代码正确执行。

由于使用dlload和dlsym来访问功能是很常见的,我不认为下来投票是公平的。