在类中定义的方法的地址

时间:2013-06-23 04:33:38

标签: c++

假设我有一堂课:(对不起其他问题呃)

class myClass
{
private:
   int a;
public:
   int GetA() { return a; }
};

如果c GetA()上通常定义了int myClass::GetA() { return a; } 我可以调试它并找到这个函数的地址,但由于它在类中定义,我不能这样做。

在真正的问题中我想知道GetDirection()的地址但是你可以看到它没有任何地址,我试着搜索调用它的指针,但是没有汇编{{1任何指令

enter image description here

如果它是在课外定义我会做的:

call

现在我有了指向该类的指针,但没有int callGetAFunction( DWORD* pointerToThatClass ) { int retMe; __asm { mov ecx, pointerToThatClass mov eax, 0x00427110 //example address of myClass::GetA() call eax mov retMe, eax } return retMe; } 方法的地址,因为它定义了它,我怎么能调用GetA()方法呢? (在dll上检索实际指针,我试图从那里调用GetA()

GetA()

3 个答案:

答案 0 :(得分:2)

我不确定我明白你的意思。 (&)运算符的地址如何?

int (myClass::*ptr)() = &myClass::GetA;

myClass obj(42); // or however you construct the object
cout << (obj.*ptr)() << endl;

答案 1 :(得分:1)

myClass::GetA已编译时,您无法使用{strong>内存地址,因为它被视为inline

  

定义类成员函数的唯一区别   完全在同类中或仅包括原型及以后   它的定义是,在第一种情况下函数会   编译器自动将其视为内联成员函数,   而在第二个,它将是一个普通(非内联)类成员   功能,实际上假设行为没有差异。

http://www.cplusplus.com/doc/tutorial/classes/中所述。

答案 2 :(得分:0)

为什么不简单:

int main () {
    MyClass * p = functionThatReturnAMyClassObj ();
    p->getA ();
}