Несогласованное вычисление смещения члена в классе MFC

В нашем проекте MFC VS2013 класс приложения CWinApp имеет член CWordArray.

Глядя на разборку, мы можем сказать, что смещение этого элемента составляет 21Eh.

Это вызов ассемблерного кода SetSize, вызываемого из 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)

Однако в классе 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

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]