假设我有一堂课:(对不起其他问题呃)
class myClass
{
private:
int a;
public:
int GetA() { return a; }
};
如果c GetA()
上通常定义了int myClass::GetA() { return a; }
我可以调试它并找到这个函数的地址,但由于它在类中定义,我不能这样做。
在真正的问题中我想知道GetDirection()
的地址但是你可以看到它没有任何地址,我试着搜索调用它的指针,但是没有汇编{{1任何指令
如果它是在课外定义我会做的:
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()
答案 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
。
定义类成员函数的唯一区别 完全在同类中或仅包括原型及以后 它的定义是,在第一种情况下函数会 编译器自动将其视为内联成员函数, 而在第二个,它将是一个普通(非内联)类成员 功能,实际上假设行为没有差异。
答案 2 :(得分:0)
为什么不简单:
int main () {
MyClass * p = functionThatReturnAMyClassObj ();
p->getA ();
}