Inconsistent member offset computation in MFC class

74 views Asked by At

In our VS2013 MFC Project, the CWinApp application class has a CWordArray member.

Looking at the dissassembly we can tell that the offset of this member is 21Eh.

This is the call to SetSize assembly code called from within the CwinApp:

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)  

However, in a CView class, we retrieve the CwinApp pointer and reference this same member. When we look at the dissassembly code in the CView class, the compiler has set the offset at 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  

We have done the obvious – clean, rebuild all. We have ensured both compilation units are using the same application header file.

The above was ported from a VS6 application that handles this correctly.

We're at a loss to explain the above. Can anyone help?

0

There are 0 answers