他のコードで仮想メンバー関数のコードを確認する必要があります。では、正しいコードを指すポインターを取得するにはどうすればよいでしょうか。
class MyInterface {
public:
virtual void VirtualMethod() = 0;
};
class MyImplementation : public MyInterface {
private:
int m_value;
public:
MyImplementation() : m_value(0) { }
virtual void VirtualMethod() {
m_value = 1;
}
};
void main(int argc, char* argv[])
{
MyInterface* pInterface = new MyImplementation();
// In my real code on the following line, we do not have access to the declaration of MyImplementation
unsigned int* pFunctionPointer = (unsigned int*)pInterface->VirtualMethod;
// Now we want to access the compiled code of MyImplementation::VirtualMethod.
printf("0x%08x\n", *pFunctionPointer);
}
私の実際のコードでは、私のドリフトを取得した場合、「メイン」関数から MyImplementation 宣言にまったくアクセスできません。