Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > SetWindowLong


Автор: devmstr 9.12.2006, 07:05
Есть код:
Код
INT_PTR EdtProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar);

OldEdtProc    = (WNDPROC)SetWindowLong(GetDlgItem(hDlg, IDC_EPRB), GWL_WNDPROC, (LONG)EdtProc);


На него компиллер выводит warning - "'type cast' : pointer truncation from 'INT_PTR (__cdecl *)(HWND,UINT,WPARAM,LPARAM)' to 'LONG" и "'type cast' : conversion from 'LONG' to 'WNDPROC' of greater size".
Я понимаю мелочь, но все равно. Как избавится от этого сообщения, ну кроме как отключить его в настройках компилятора...  

Автор: Aleksandor 9.12.2006, 22:36
А если так?

Код

WNDPROC wpEdiRpoc; 
LRESULT APIENTRY EdtProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

wpEdtProc=(WNDPROC) SetWindowLong(GetDlgItem(hDlg, IDC_EPRB), GWL_WNDPROC, (LONG) EdtProc);

Автор: GremlinProg 9.12.2006, 23:04
убери из командной строки флаг /Wp64. либо используй промежуточные преобразования XXX_PTR
Код

(LONG)(LONG_PTR)EdtProc

Автор: devmstr 11.12.2006, 09:56
Цитата(GremlinProg @  9.12.2006,  23:04 Найти цитируемый пост)
(LONG)(LONG_PTR)EdtProc

То, что надо. Спасибо!

Автор: Nastya 11.12.2006, 11:57
SetWindowLongPtr

Добавлено @ 11:58 
Иначе, все вылетит на 64- битных виндузах

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)