возвращающих FARPROC, вам нужно приводить
возвращающих FARPROC, вам нужно приводить типы указателей
функции, например:
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg,
WPARAM wParam,
LPARAM lParam);
DLGPROC lpfnDlg;
lpfnDlg=(DLGPROC)MakeProcInstance(DlgProc, hinst);
...
FreeProcInstance((FARPROC)lpfnDlg);
Особое внимание обратите на HMODULE и HINSTANCE. Функции
ядра, осуществляющие управление модулями, обычно используют HINSTANCE, но некоторые API возвращают или воспринимают
только HMODULE.
Если вы копируете какие-то описания функций API из
WINDOWS.H, они могут быть изменены, и ваши описания могут
оказаться устаревшими. Удалите локальные описания.
Приведите тип результата LocalLock и GlobalLock к соответствующему виду указателя данных. Параметры этих и других функций управления памятью должны при необходимости
приводиться к LOCALHANDLE или GLOBALHADLE.
Приведите результат GetWindowWord и GetWindowLong и параметры к SetWindowWord и SetWindowsLong.
При приведении типа SendMessage, DefWinmdowProc и
SendDlgItemMsg или любых других функций, которые возвращают LRESULT или LONG к какому-либо описателю вы должны сначала привести результат к UINT:
HBRUSH hbr;
hbr = (HBRUSH)(UINR)
SendMessage(hwnd WM_CTLCOLOR, ..., ...);
Параметр CreateWindow и CreateWindowEx функции hmenu иногда используются для передачи целочисленного управляющего
идентификатора. В этом случае вы должны привести тип к
HMENU:
HWND hwmd;
int id;
hwnd = CreateWindow("Button", "Ok", BS_PUSBUTTON,
x, y, cx, cy, hwndParent,
(HMENU)id, // здесь требуется приведение типа
hinst, NULL);
Полиморфические типы данных (WPARAM, LPARAM, LRESULT, void
FAR*) следует возможно скорее присваивать переменным. Избегайте использовать их в своих программах, когда тип значения известен. Это минимизирует число потенциально небезопасных и непереносимых в 32-разрядный режим преобразований типов. Макрокоманды API и механизмы обработки сообщений, предусмотренные в windowsx.h, будут выполнять практически всю упаковку и распаковку этих типов данных способом, обеспечивающим переносимость в 32-разрядный режим. Ознакомьтесь с наиболее общими предупреждениями и ошибками
компилятора, которые вы можете обнаружить при переходе к
STRICT.
Содержание раздела