在我们的 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 应用程序移植而来的。
我们无法解释上述情况。任何人都可以帮忙吗?