Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dlopenc++;然后使用std::string和函数 我成功地在我的C代码中使用了DLoad,得到了一个在Android中编写的C++库的句柄。 然后我用 dlsym(handle_from_dlload,“函数名为字符串”) 对于构造函数_Android_C++_C_Linux_String - Fatal编程技术网

dlopenc++;然后使用std::string和函数 我成功地在我的C代码中使用了DLoad,得到了一个在Android中编写的C++库的句柄。 然后我用 dlsym(handle_from_dlload,“函数名为字符串”) 对于构造函数

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:

然后我可以通过调用我自己的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::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在这方面既不是必需的,也不是有用的。)