我正在从共享库(a.so)调用函数。我使用dlopen加载了a.so,并使用dlsym加载了映射函数。
int (*funcPtr)() = reinterpret_cast<int(*)()>(dlsym(some symbol..));
我的问题是,如果我的funcPtr输入变量包含一个“ this”,那么我该如何转换呢?
预期功能
int func(*this, int,int,int,int)
我正尝试将其投射为这样
class test
{
};
int (*funcPtr)(*test, int,int,int,int) = reinterpret_cast<int(*)(*test,int,int,int,int)>(dlsym(some symbol..));
答案 0 :(得分:2)
我的问题是,如果我的funcPtr的输入变量包含[指向类对象的指针],那我该如何转换呢?
以完全相同的方式进行,除了参数列表中包含指针:
void* addr = dlsym(some symbol..);
int (*funcPtr)(test*) = reinterpret_cast<int(*)(test*)>(addr);
或者更漂亮的别名:
using func = int(test*);
func* funcPtr = reinterpret_cast<func*>(addr);
为了执行此强制转换,必须声明该类。不需要定义。您可以这样声明一个类:
class test;