dlopenc++;然后使用std::string和函数 我成功地在我的C代码中使用了DLoad,得到了一个在Android中编写的C++库的句柄。 然后我用 dlsym(handle_from_dlload,“函数名为字符串”) 对于构造函数
然后我可以通过调用我自己的typedef'ed MyCreate来使用这个构造函数,没有问题可以很好地工作。例如dlopenc++;然后使用std::string和函数 我成功地在我的C代码中使用了DLoad,得到了一个在Android中编写的C++库的句柄。 然后我用 dlsym(handle_from_dlload,“函数名为字符串”) 对于构造函数,android,c++,c,linux,string,Android,C++,C,Linux,String,然后我可以通过调用我自己的typedef'ed MyCreate来使用这个构造函数,没有问题可以很好地工作。例如 void*myhandle=malloc(16); MyCreate(myhandle,1) 这在我的C代码中定义如下 typedef void(*MyCreate)(void*句柄,uint32\u t nbr) 并且在C++中有这个签名 OtherClassInLib::OtherClassInLib(uint32\u t nbr) 但是还有一个构造函数,它采用C++ STD:
void*myhandle=malloc(16);
MyCreate(myhandle,1)代码>
这在我的C代码中定义如下
typedef void(*MyCreate)(void*句柄,uint32\u t nbr)
并且在C++中有这个签名
OtherClassInLib::OtherClassInLib(uint32\u t nbr)
<>但是还有一个构造函数,它采用C++ <代码> STD::String
我已经在我的C代码中这样声明了
typedef void(*MyCreate2)(void*handle,uint32\u t nbr,void*isvoidstarcorrect here)
在C++中有这个签名
OtherClassInLib::OtherClassInLib(uint32\u t nbr,std::string astring)
当字符串是一个对象时,如何使用字符串(例如C中的“hello”)调用此构造函数?
我尝试过各种方法,比如char*或char[]和malloced内存,但都是一样的,崩溃
我似乎没有访问#include的权限,并且带有std::string的构造函数/函数已成功加载dlsym。
我的C++是生疏的,所以我希望能有一些帮助理解这个。 < p>我的解决方法是用C++编写一个包装器,这是合理和正确的方法。我在“<代码> >代码>中不能获得任何C++头的原因,基本上是我没有在STELLE 中设置STL“StLtPixStand”。
当这起作用时,很容易使用std::string正确声明签名并使代码正确执行
由于使用dlload和dlsym访问功能是很常见的,我认为否决票是不公平的 我真的很惊讶这些都能奏效。有什么理由不能使用C++
?事实上它工作得很好,我不是第一个这样做的人。不使用C++的原因是我没有真正的访问头文件(因此DLLoad),有一个C代码的构建系统,其次,我的C++是C++的RuStudioC++UB:在一些平台上,它可能在最简单的情况下工作。(尽管如此,usign dlsym/dlopen在这方面既不是必需的,也不是有用的。)