将对象强制转换为dlsym返回的地址

时间:2019-04-08 00:19:02

标签: c++ c

我正在从共享库(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..));

1 个答案:

答案 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;
相关问题