所以我在我的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 ++真的很生疏,所以我很感激帮助理解这一点。
答案 0 :(得分:0)
我的解决方案是用C ++编写一个包装器,这是一种明智和正确的方法。我无法像.select("ID", "review")
那样得到任何C ++标题的原因基本上就是我没有把stl" stlport_static"在gradle中
当这工作时,很容易使用std :: string正确声明签名并使代码正确执行。
由于使用dlload和dlsym来访问功能是很常见的,我不认为下来投票是公平的。