2015-06-29 2 views
1

Я использую VS 2008. Я скомпилирую свой код на C++ в 32-битном компиляторе. Я использую DialogBoxParam для создания графического интерфейса и его работы. Но тот же код скомпилирован в 64-битном компиляторе, я получаю ошибку, что ошибка C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'BOOL (__cdecl *)(HWND,UINT,WPARAM,LPARAM)' to 'DLGPROC'. Пожалуйста, помогите мне с этимПреобразование кода на C++ с 32 до 64 бит

+0

Я внес эти изменения. Тем не менее я получаю ту же ошибку –

+0

Если «эти изменения» относятся к конкретному ответу, добавьте комментарий к этому ответу вместо вопроса. Я думаю, вы имеете в виду ответ Йоахима, и, очевидно, вы не получите тот же ответ, если бы вы действительно применили его изменения. – MSalters

+0

Да, я упомянул ответ Йоахима, я не получил никакого решения –

ответ

1

Поскольку вы компилируете 32-битную машину, обычной проблемой при переходе на 64-битную машину является то, что длинный и int 32 бит на 32-битной платформе, а длинный - 64 бит и int 32 бит на 64-битной платформе. Если вы используете ссылку на указатель или манипулирование байтами, это может вызвать трудности при вызове ваших функций.

Вам необходимо изучить фактическую обработку.

6

Если вы проверяете, например. this DLGPROC reference вы увидите, что он должен вернуть INT_PTR, а не BOOL.

Проблема, которая возникает из-за того, что BOOL является псевдонимом типа int, который представляет собой 32 бита на обеих 32- и 64-разрядных платформах с использованием компилятора Visual Studio. INT_PTR, с другой стороны, 64 бит на 64-битных системах, что приводит к несоответствию типа возврата.

Измените тип возврата функции диалога на правильный INT_PTR и он должен работать на и 32 и 64-разрядных системах.

Смежные вопросы