Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизКак запихнуть LongWord в LongInt ? Найти похожие ветки
← →
ANB © (2006-03-02 14:36) [0]Имею объявление функции :
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. Как ее забороть ?
← →
umbra © (2006-03-02 14:56) [1]а вообще реально иметь столько окон в системе?
а по сабжу - в свойствах проекта на закладкеCompiler
в группеRuntime errors
убрать галкуRange Checking
← →
begin...end © (2006-03-02 14:59) [2]LPARAM(hMainWindow). Или отключить Range Checking.
← →
MBo © (2006-03-02 15:00) [3]просто привести тип не поможет?
Integer(DwordVar)
однако странно, что хэндл окна может вылезать за MaxInt
← →
ANB © (2006-03-02 15:06) [4]Так. Поясняю.
1. Реальный хендл вышел за maxint.
2.Отключать Range Checking неохота, т.к. ошибка может вылезти в другом месте, а пропускать их как то нехочется. Софт то еще дописывается.
3. Задачу решил, правда некузяво, так :
Объявил в интерфейсе
function SendMessageDWord(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: DWord): LRESULT; stdcall;
В реализации
function SendMessageDWord; external user32 name "SendMessageA";
Ну и в коде заменил вызов на новую функцию. Ошибка больше не лезет.
Если кто знает решение лучше - плиз, подскажите.
← →
umbra © (2006-03-02 15:09) [5]отключить Range Checking для вызова этой функции, Т.е. перед вызовом написать {$R-}, а после него {$R+}
← →
begin...end © (2006-03-02 15:12) [6]> ANB © (02.03.06 15:06) [4]
Не совсем понятно, почему не подошло [2] или [3].
← →
ANB © (2006-03-02 15:12) [7]
> Integer(DwordVar)
Думаю, простым приведением вряд ли обойдемся, т.к. делфа сама неявно должна была приводить и словила ошибку.
← →
ANB © (2006-03-02 15:13) [8]
> Не совсем понятно, почему не подошло [2] или [3].
Хотя ща попробую . . .
← →
ANB © (2006-03-02 15:15) [9]Я был не прав - приведение работает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c