强制把成员函数指针当成一般函数指针用

class A
{
public:
    int func(void *p) 
    {
        return 0;
    }
};


int main()
{
    A a;

    typedef int(*pfunc)(void *);
    typedef int(A::*pfunc2)(void *);
    pfunc2 f2 = &A::func;
    int  b = *(int*)&f2;
    //__asm
    //{
    //    mov eax, [f2];
    //    mov b, eax;
    //    //jmp b;
    //}
    //b = b+(int)&a;
    //(a.*f2)(0);
    //int b2 = a.func;
    //int pf = (int)a.func;
    //pfunc pf= (pfunc)a.func;
    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)b, NULL, NULL, NULL);

    Sleep(100000);

    return 0;
}

打断点后可以看到能执行到A::func,但注意的是函数内无法使用this

猜你喜欢

转载自blog.csdn.net/xk641018299/article/details/108640670