指向成员类的指针

时间:2014-01-20 02:09:55

标签: c++ oop

我有一个挂钩库,我正在移植到C ++,唯一的问题是我需要一个指向客户端函数的void指针,我不能得到任何函数成员的原始指针,所以现在它只适用于静态函数。这迫使我制作一个我不想要的单身模式。

以下是我正在面对的一个问题片段,它创建了一个打印有关挂钩函数的数据的类:

class SpyLib
{
private:
    HookLib hooklib;
    std::vector<SpyRecord> records;

    SpyRecord findRecord(int id);
public:
    //Member function to callback after the hook
    void spyer(void* register_context, int hookid);
};

由于我无法获得spyer函数的地址,我需要将其声明为“static”,这使我声明findRecord以及查找有关钩子进程的数据。由于findRecord使用“记录”向量,这也需要是静态的,依此类推。最后,我正在处理一个静态类,并被迫使用单例模式。

问题是:除了使用vtable来查找成员函数的VA之外,还有什么方法吗?如果没有,那么微软如何绕道库?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过将函数调用委托给包装器非成员函数来解决问题:

class Pars
{
public:
SpyLib* spyLibPtr;
void* register_context;
int hookid;
};

void call_spyer(void* voidPtr)
{
   Pars* parsPtr = reinterpret_cast<Pars*>(voidPtr);
   parsPtr->spyLibPtr->spyer(parsPtr->register_context,parsPtr->hookid);
}

这样你可以将指针传递给call_spyer。