Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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
C++ 将对象强制转换为dlsym返回的地址_C++_C - Fatal编程技术网

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

C++ 将对象强制转换为dlsym返回的地址,c++,c,C++,C,我正在从共享对象(a.so)调用一个函数。我用dlopen加载了a.so,用dlsym加载了mapped函数 int (*funcPtr)() = reinterpret_cast<int(*)()>(dlsym(some symbol..)); 我正试图把它塑造成这样 class test { }; int (*funcPtr)(*test, int,int,int,int) = reinterpret_cast<int(*)(*

我正在从共享对象(a.so)调用一个函数。我用dlopen加载了a.so,用dlsym加载了mapped函数

    int (*funcPtr)() = reinterpret_cast<int(*)()>(dlsym(some symbol..));
我正试图把它塑造成这样

    class test
    {

    };

    int (*funcPtr)(*test, int,int,int,int) = reinterpret_cast<int(*)(*test,int,int,int,int)>(dlsym(some symbol..));
类测试
{
};
int(*funcPtr)(*test,int,int,int,int)=重新解释转换(dlsym(某些符号…);
我的问题是,如果funcPtr的输入变量包含一个[指向类对象的指针],那么我该如何强制转换它

以完全相同的方式,除了参数列表中有指针外:

void* addr = dlsym(some symbol..);
int (*funcPtr)(test*) = reinterpret_cast<int(*)(test*)>(addr);

突击测验:如何声明指向此类的方法的指针。您可以使用与声明指向
this
类的方法的指针相同的类型重新解释它,该类将四个int作为参数,并返回一个int。
*this
不是类型,因此它不能显示为函数参数的类型。您试图调用的函数的签名是什么样子的?它怎么可能包含“this”?您正在将地址转换为指针。我的函数是int myFunc(类*this,int a,int b,int c,int d)。我正在尝试通过dlsym强制转换此函数。然而,我在试图理解如果我创建一个伪类并对其进行强制转换会发生什么时遇到了一些困难。那么你想说的是,我必须创建自己的类并对其进行强制转换?如果我不知道so中的类的方法或变量呢?不,您不应该创建自己的类。执行此强制转换不需要定义类。您必须强制转换,因为
dladdr
返回一个空指针。那么您的意思是我是否要声明一个类“test”,并且可以在参数列表中使用它int(functptr)(test)=重新解释(addr);'谢谢!谢谢你提供建议而不是屈尊俯就的评论:)@MichaelGoh这里没有屈尊俯就的评论。你应该感谢评论中给你的建议,并仔细思考他们问题的答案。
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;