![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запихнуть LongWord в LongInt ? [D7, XP]
ANB © (2006-03-02 14:36:00)Имею объявление функции :
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
Мне нужно передать в lParam хендл окна, а оно LongWord, т.е. может быть длиннее 2147483648. Такое число в LongInt не лезет. LParam объявлено как LongInt.
И таки я нарвался на ошибку :
При вызове :
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_HOTKEY, hMainWindow); // Один из способов поднять окно на верхний план.
если в hMainWindow число 2147483648, происходит ошибка Range Check Error. Как ее забороть ?
ANB (2006-03-02 15:15:00) [1]Я был не прав - приведение работает.
ANB (2006-03-02 15:13:00) [2]
> Не совсем понятно, почему не подошло [2] или [3].
Хотя ща попробую . . .
begin...end (2006-03-02 15:12:00) [3]> ANB © (02.03.06 15:06) [4]
Не совсем понятно, почему не подошло [2] или [3].
ANB (2006-03-02 15:12:00) [4]
> Integer(DwordVar)
Думаю, простым приведением вряд ли обойдемся, т.к. делфа сама неявно должна была приводить и словила ошибку.
umbra (2006-03-02 15:09:00) [5]отключить Range Checking для вызова этой функции, Т.е. перед вызовом написать {$R-}, а после него {$R+}
ANB (2006-03-02 15:06:00) [6]Так. Поясняю.
1. Реальный хендл вышел за maxint.
2.Отключать Range Checking неохота, т.к. ошибка может вылезти в другом месте, а пропускать их как то нехочется. Софт то еще дописывается.
3. Задачу решил, правда некузяво, так :
Объявил в интерфейсе
function SendMessageDWord(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: DWord): LRESULT; stdcall;
В реализации
function SendMessageDWord; external user32 name 'SendMessageA';
Ну и в коде заменил вызов на новую функцию. Ошибка больше не лезет.
Если кто знает решение лучше - плиз, подскажите.
MBo (2006-03-02 15:00:00) [7]просто привести тип не поможет?
Integer(DwordVar)
однако странно, что хэндл окна может вылезать за MaxInt
begin...end (2006-03-02 14:59:00) [8]LPARAM(hMainWindow ). Или отключить Range Checking.
umbra (2006-03-02 14:56:00) [9]а вообще реально иметь столько окон в системе?
а по сабжу - в свойствах проекта на закладкеCompilerв группеRuntime errorsубрать галкуRange Checking