如何为具有常量类型的函数正确转换来自 DLsym 的返回值?
how do i cast the return value from dlsym properly for function with const types?
我想检索一个函数指针,其中包含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)
但是编译器告诉我error: expected primary-expression before ‘const’
在呼叫dlsym()
的线路旁
编辑1
typedef void*(*palpr_init_type)(const char*, const char*, const char*, const char*);
void*(*palpr_init) (const char*, const char*, const char*, const char*);
typedef int (*palpr_is_loaded_type)(void*);
int (*palpr_is_loaded) (void*);
typedef alpr::AlprResults (*palpr_recognize_type)(std::vector<char>);
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 = (palpr_init_type)dlsym(alprhandle, "openalpr_init");
if (!palpr_init)
std::cerr << "FATAL: Could not find openalpr_init " << dlerror() << std::endl;
palpr_is_loaded = (palpr_is_loaded_type)dlsym(alprhandle, "openalpr_is_loaded");
if (!palpr_is_loaded)
typedef void* (*palpr_init_type)(const char*, const char*, const char*, const char*);
palpr_init_type palpr_init = (palpr_init_type)dlsym(...)
使用函数指针时,最好的办法是为类型声明一个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)
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 将内存分配返回值强制转换为 TYPE 数组
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 如何为具有常量类型的函数正确转换来自 DLsym 的返回值?
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- 动态强制转换返回空值
- 函数模板中的无效转换错误,返回值取决于其泛型类型
- 放置 new 的返回值与其操作数的强制转换值之间是否存在(语义)差异
- 没有从类型为"basic_istream<char,std::__1::char_traits >"的返回值<char>到函数返回的可行转换
- 如何将枚举返回值转换为C 异常
- 创建一个函数,该函数根据边缘转换为给定(浮点)时间值计算布尔返回值
- 是否可以将动态强制转换"this"作为返回值?
- 为什么 GCC 接受在 std::strrchr() 返回值上从 'const char *' 转换为 'char *'?
- 将引用强制转换为函数指针返回值中的指针
- 将函数的返回值类型转换为大小相同的不相关类型
- const reflvalue转换为非const函数返回值是否特别减少拷贝数?
- 对模板函数的返回值进行类型转换
- 是一个函数,用于转换复制返回值的对象