MFC类

时间:2015-06-15 06:45:01

标签: c++ mfc offset visual-studio-6

在我们的VS2013 MFC项目中,CWinApp应用程序类有一个CWordArray成员。

看看反汇编,我们可以看出这个成员的偏移是21Eh。

这是对从CwinApp中调用的SetSize汇编代码的调用:

m_arrayDefInd.SetSize(64, 1);
00F36D0F  push        1  
00F36D11  push        40h  
00F36D13  mov         ecx,dword ptr [this]  
00F36D16  add         ecx,21Eh  <<<<<< NOTE OFFSET
00F36D1C  call        CWordArray::SetSize (0FC25E0h)  

但是,在CView类中,我们检索CwinApp指针并引用同一个成员。当我们查看CView类中的反汇编代码时,编译器已将偏移量设置为230h。

CMyApp *pApp = (CMyApp *)AfxGetApp();

int size = pApp->m_arrayDefInd.GetSize();
00F2DA42  mov         ecx,dword ptr [ebp-20h]  
00F2DA45  add         ecx,230h  <<<<<< NOTE OFFSET  
00F2DA4B  call        CWordArray::GetSize (0FC225Ch)  
00F2DA50  mov         dword ptr [ebp-24h],eax  

我们做了很明显的 - 干净,重建所有。我们确保两个编译单元都使用相同的应用程序头文件。

以上是从正确处理此问题的VS6应用程序移植而来。

我们无法解释上述情况。有人可以帮忙吗?

0 个答案:

没有答案