информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] warning при кастинге 06.07.07 03:29  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Код
::SetWindowLongPtr( m_hWnd, GWL_USERDATA, reinterpret_cast<LONG_PTR>( this ));
приводит к : warning C4244: 'argument' : conversion from 'LONG_PTR' to 'LONG', possible loss of data

И обратно, код
CTabDialog* pdialog =reinterpret_cast<CTabDialog*>(GetWindowLongPtr(hwndDlg, GWL_USERDATA));
приводит к : warning C4312: 'reinterpret_cast' : conversion from 'LONG' to 'CTabDialog *' of greater size

Работать-то работает, но как исправить по-существу кастинг?

Использую VS 2005 Express .
Спасибо.
[C++] Очень странно 06.07.07 11:45  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Код
> ::SetWindowLongPtr( m_hWnd, GWL_USERDATA,
> reinterpret_cast<LONG_PTR>( this ));
> приводит к : warning C4244: 'argument' : conversion from
> 'LONG_PTR' to 'LONG', possible loss of data

Во-первых под x64 этот код у тебя вообще не скомпилируется. Ну нету у него GWL_USERDATA, а есть GWLP_USERDATA

А во-вторых (и это странно), такое ощущение, что третий аргумент у тебя объявлен LONG-ом. Посмотри откуда у тебя инклудится winuser.h и посмотри в нем прототип SetWindowLongPtr. Ну еще глянь где объявляется typedef на LONG_PTR. Если лень продираться через все #ifdef-ы, то включи в пропертях проекта Configuration Properties->C/C++->Preprocessor->Generate Preprocessed File.

И после этого разбирайся какой typedef у тебя включен и почему.

> И обратно, код
> CTabDialog* pdialog
> =reinterpret_cast<CTabDialog*>(GetWindowLongPtr(hwndD
> lg, GWL_USERDATA));
> приводит к : warning C4312: 'reinterpret_cast' : conversion
> from 'LONG' to 'CTabDialog *' of greater size
>
> Работать-то работает, но как исправить по-существу кастинг?
>
> Использую VS 2005 Express .
> Спасибо.
У меня VS 2005 Express. По умолчанию была включена опция... 07.07.07 05:56  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
У меня VS 2005 Express. По умолчанию была включена опция "/Wp64 (Detect 64-Bit Portability Issues) ".
(это страно, т.к. в help-e указано, что по умолчанию эта опция должна быть выключена для Win32 apps).
Выключил эту опцию - warning-и то и пропали.

Что же касается, tydef-ов, то SetWindowLongPtr определён в <winuser.h> как
WINUSERAPI LONG WINAPI SetWindowLongW( __in HWND hWnd, __in int nIndex, __in LONG dwNewLong);
Чего и следовало быть для моего W32 компилера.

LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong); появляется только для _W64 (что логично)

Таким образом это всё предполагает, что код должен компилироваться нормально для w64. Надеюсь.

Про GWLP_USERDATA - согласен. Пофиксил. Спасибо, что заметил.
[C++] Зачем исправлять? 06.07.07 03:54  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Это же "хвост" с 16 разрядных времен. Если прога компилится под win32 - забей на это.
Наоборот, это хвост с 32-битных времен. 06.07.07 11:36  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Это же "хвост" с 16 разрядных времен. Если прога компилится
> под win32 - забей на это.

LONG всю жизнь был 32-битным, а потом оказалось, что указатели в LONG уже не влазят - ввели LONG_PTR - 32-битный на 32-битной машине и 64-битный на 64-битной
А, ну да, точно! Просто, в аналогичнй ситуяйции с 16/32 возникали аналогичные варнинги. Все равно - можно забить. 08.07.07 08:21  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach