Четвертый BORLAND С++ и его окружение



         

Написание переносимого кода Windows - часть 3


возвращающих 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.




  • Содержание  Назад  Вперед