#include <stdio.h>
#include <memory>
class CBase
{
public:
virtual void test()
{
printf("CBase::test()\r\n");
}
};
class CVirtTest
{
public:
virtual void test()
{
printf("CVirtTest::test()\r\n");
}
};
typedef void (* func)();
typedef struct
{
func Entry;
} FUNC_TABLE;
void Trick()
{
printf("Trick()\r\n");
}
int main()
{
CVirtTest test;
CBase* pBase = (CBase*)&test;
FUNC_TABLE funcTable = { Trick };
FUNC_TABLE* pFuncTable = &funcTable;
memcpy(&test, &pFuncTable, sizeof(long));
pBase->test();
return 0;
}
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihKBvuafo1BxKS3c4dmvxygkwNOcOqDdHg7AEzbylfDTzsZPUplYk6ktqlJGzNAxdZZBpfMvetVpexB5fLp9tL0dFjm9k_bnQ207WkiHgiwxlqCiYYUx70IBulJ5fjnwgnpl6fzFBkTis/s400/trick.png)
Для проверки можно закоментировать строку:
//memcpy(&test, &pFuncTable, sizeof(long));
получается:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFkyLqoaY-_t_VyjqYKQDBzm-v0dZ_pz-JANZ83aWx_4lkLebb4-BIiZtQ3yAEm0K16TqPAzrWC27ti9fenQ-h0rdaIq9_13pCzwc11KhQcDjyZHtnfFpH2lx7yhtZklT8Y_7ddT_LDCQ/s400/no+trick.png)
Работает!
No comments:
Post a Comment