C++ 对于具有常量类型的函数,如何正确地从dlsym强制转换返回值?
我想用C++ 对于具有常量类型的函数,如何正确地从dlsym强制转换返回值?,c++,dlsym,C++,Dlsym,我想用dlsym检索一个函数指针,它的原型中有const char*s。如何才能正确完成此操作,我尝试了: int main (void) { void *alprhandle = NULL; std::string alprlib = "/usr/lib/libalpropencv.so.3"; #ifdef DLSYM void*(*palpr_init)(const char*, const char*, const char*, const char*);
dlsym
检索一个函数指针,它的原型中有const char*
s。如何才能正确完成此操作,我尝试了:
int main (void)
{
void *alprhandle = NULL;
std::string alprlib = "/usr/lib/libalpropencv.so.3";
#ifdef DLSYM
void*(*palpr_init)(const char*, const char*, const char*, const char*);
int (*palpr_is_loaded)(void*);
alpr::AlprResults (*palpr_recognize)(std::vector<char>);
//open OpenALPR OpenCV library
alprhandle = dlopen(alprlib.c_str(), RTLD_NOW);
if (!alprhandle){
std::cerr << dlerror() << alprlib <<std::endl;
exit(0);
}
//find the address of functions
palpr_init = (const char*, const char*, const char*, const char*)dlsym(alprhandle, "openalpr_init");
if (!palpr_init)
使用函数指针时,最好为类型声明一个
typedef
,然后只需键入一次,这样更容易更改,并且可以在强制转换中使用
例如,使用typedefs,您的代码将变为:
typedef void*(*palpr_init_t)(const char*, const char*, const char*, const char*);
typedef int (*palpr_is_loaded_t)(void*);
alpr::AlprResults (*palpr_recognize_t)(std::vector<char>);
int main (void)
{
void *alprhandle = NULL;
std::string alprlib = "/usr/lib/libalpropencv.so.3";
#ifdef DLSYM
palpr_init_t palpr_init;
palpr_is_loaded_t palpr_is_loaded;
palpr_recognize_t palpr_recognize;
//open OpenALPR OpenCV library
alprhandle = dlopen(alprlib.c_str(), RTLD_NOW);
if (!alprhandle){
std::cerr << dlerror() << alprlib <<std::endl;
exit(0);
}
//find the address of functions
palpr_init = (palpr_init_t)dlsym(alprhandle, "openalpr_init");
if (!palpr_init)
typedef void*(*palpr_init_t)(常量字符*,常量字符*,常量字符*,常量字符*);
typedef int(*帕尔普已加载)(无效*);
alpr::AlprResults(*palpr______t)(标准::向量);
内部主(空)
{
void*alprhandle=NULL;
std::string alprlib=“/usr/lib/libalpropencv.so.3”;
#ifdef DLSYM
帕尔普雷尼特帕尔普雷尼特;
帕尔普若已加载,帕尔普若已加载;
帕尔普·鲁尔承认,帕尔普·鲁尔承认;
//打开OpenALPR OpenCV库
alprhandle=dlopen(alprlib.c_str(),RTLD_NOW);
如果(!alprhandle){
如果我的函数返回一个int
而不是void*
,该怎么办?按照您的typedef方法,我得到无法将'int(**)(void*)转换为'int(*)(void*))'在赋值中
您做错了什么。显示产生错误的代码。请参阅上面的EDIT1,palpr\u加载了相关函数。您显示的代码与您实际编译的代码不同。
typedef void* (*palpr_init_type)(const char*, const char*, const char*, const char*);
palpr_init_type palpr_init = (palpr_init_type)dlsym(...)
typedef void*(*palpr_init_t)(const char*, const char*, const char*, const char*);
typedef int (*palpr_is_loaded_t)(void*);
alpr::AlprResults (*palpr_recognize_t)(std::vector<char>);
int main (void)
{
void *alprhandle = NULL;
std::string alprlib = "/usr/lib/libalpropencv.so.3";
#ifdef DLSYM
palpr_init_t palpr_init;
palpr_is_loaded_t palpr_is_loaded;
palpr_recognize_t palpr_recognize;
//open OpenALPR OpenCV library
alprhandle = dlopen(alprlib.c_str(), RTLD_NOW);
if (!alprhandle){
std::cerr << dlerror() << alprlib <<std::endl;
exit(0);
}
//find the address of functions
palpr_init = (palpr_init_t)dlsym(alprhandle, "openalpr_init");
if (!palpr_init)