获得类成员函数地址


void mm1()
{
    printf(
"mm1");
    
return;
}

class TTG
{
public:

    
int a;
    
void m()
    {
        printf(
"m");
        
return;
    };
    
void c()
    {
        printf(
"c");
        
return;
    };
};


void mm2()
{
    printf(
"mm2");
    
return;
}

int main(int argc, char* argv[])
{
    printf(
"Hello World!\n");
    TTG g;
    typedef 
void (TTG::* PF)(void);

    PF pt
= g.m;
    PF pt1
= TTG::m;
    DWORD addr
=*(DWORD*)&pt;

    printf(
"%d %d %d %d \n",pt,pt1,addr,TTG::m);

    printf(
"TTG::m %d TTG::c %d\n",g.m,g.c);
    DWORD add1
=(DWORD)mm1;
    DWORD add2
=(DWORD)mm2;

    printf(
"mm1:%d mm2:%d\n",add1,add2);

    
return 0;
}
Hello World!

4198528 4198528 4198528 4198528
TTG::m 4198528 TTG::c 4198544
mm1:4198400 mm2:4198416

该结果要在release下才能正确
debug版作了其他的处理,会导致结果不正确。
原文地址:https://www.cnblogs.com/ahuo/p/1580167.html