Четвертый Borland C++ и его окружение




Общие сообщения об ошибках и предупреждения компилятора - часть 2


исключительных случаях (так как часто это может дать в результате

некорректный код).

Non-portable conversion


(Не переносимое преобразование)

Вы приводите указатель или описатель ближнего типа к 32-битовому значению, такому как LRESULT, LPARAM, LONG или DWORD. Это

предупреждение практически всегда указывает на ошибку, так как

старшие 16 бит значения будут содержать ненулевое значение. Помещая в старшие 16 бит значение текущего сегмента данных, компилятор сначала конвертирует 16-битовый ближний указатель к 32-битовому дальнему указателю.

Чтобы избежать этого предупреждения и обеспечить размещение

в старших 16 битах 0, нужно привести тип описателя к UINT:

HWND hwnd;

LRESULT result = (LRESULT)(UINT)hwnd;

В тех случаях, когда вы хотите, чтобы 32-битовое значение

содержало указатель FAR, можно избежать предупреждения путем явного приведения типа к дальнему указателю:

char near* pch;

LPARAM lparam = (LPARAM)(LPSTR)pch;

Not an allowed type


(Не является допустимым типом)

Это сообщение об ошибке обычно выводится в результате попытки разыменования указателя void. Обычно это бывает при непосредственном использовании значения-указателя, возвращаемого GlobalLock или LocalLock. Чтобы решить данную проблему, перед использованием указателя присвойте возвращаемое значение переменной соответствующего типа (используя при необходимости приведение типа).

Size of the type is unknown or zero


(Размер типа неизвестен или равен нулю)

Вы пытаетесь с помощью + или += изменить значение пустого

указателя. Это ошибка обычно появляется в результате того, что

отдельные функции Windows (например, GlobalLock или LocalLock)

возвращающие указатели произвольных типов, определены для возврата void FAR* вместо LPSTR. Чтобы решить эту проблему, присвойте

значение void* описанной соответствующим образом переменной (приведя при необходимости тип):

BYTE FAR* lpb = (BYTE FAR*)GlobalLock(h);

lpb += sizeof(DWORD);

Type mismatch in redeclaration of имя_параметра


(Несовпадение типа при повторном описании параметра)

В вашей программе имеется несогласованное описание переменной, параметра или функции. Используя API Win32, вы можете внести

в свой исходный код изменения, которые сделают программу более

переносимой.




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