dlopen 从 C C++ lib,然后使用 std::string with function



所以我成功地在我的 C 代码中使用了 dlload 来获取我C++用 Android 编写的库的句柄和然后我用 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 的"hello",因为字符串是一个对象?我已经尝试了各种方法,例如仅使用字符*或字符[]并为此错误地分配了内存,但总是相同的,崩溃?

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

我的解决方案是用C++编写一个包装器,这是明智和正确的方法。我无法像<string>那样获得任何C++标题的原因基本上是我没有在gradle中输入stl "stlport_static">

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

最新更新