Ковырял свои код в
class cSQLInfo;
...
cSQLInfo *lpSQLInfo = new cSQLInfo(hWnd);
SetWindowLongPtr(hWnd, GWL_USERDATA, (LONG)lpSQLInfo);
...
Ругается: Warning C4311 pointer truncation from 'cSQLInfo *' to 'LONG'
..64 bit truncated to 32 bit..
Понятно, пусть будет так, код исправим если потребность будет
Почему запутался — в VC++6.0 на это не ругается, и это даже хорошо, ибо плавал глюк как раз в этой области — будем разбиратся. Вопрос: Возможно компилятор 6.0 подвинтить, чтоб ругался на такие вещи? Еще вопрос: Почему sizeof(LPSQLINFO)
typedef LPSQLINFO cSQLInfo *;
говорит, что он равен 4-м байтам == sizeof(LONG)? И почему он тогда ругнулся так, дюже мене запугав?
Как контролировать какие указатели компилятор использует?
И, кстати, может будет полезный совет, как лаконичнее записать 64 bit указатель в упомянутом SetWindowsLongPtr?
Заранее спасибо
ЗЫ: Что то прям куча вопросов...
ЗЗЫ: Или может таки стоит пойти поспать?
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, noesis, Вы писали:
N> И, кстати, может будет полезный совет, как лаконичнее записать 64 bit указатель в упомянутом SetWindowsLongPtr?
Наверное нужно использовать приведение к
ULONG_PTR
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Наверное нужно использовать приведение к ULONG_PTR
Спасибо, тож думаю в этом напрвлении, что-то в этом духе
sergey_shandar:
Точно надо поспать идти мне
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, Andrij, Вы писали:
A>Штобы убрать етот ворнинг можно в Properties -> C++, для проекта, флаг "Detect 64-bit portability issues" поставить "No"[b]
Да, нашел, тока воспользовался вышеуказанным советом: ...(ULONG_PTR)lp.., копилятор боле не жалуется, щас пытаюсь сообразить чего будет если указатель буит 64 битным SetWindowLongPtr треба LONG_PTR — Signed [b]long type for pointer precision, т.е. таки 32 бита, и в winuser.h тож самое, чета я не пойму как это понимать учитывая то, что
To write code that is compatible with both 32-bit and 64-bit versions of Windows, use SetWindowLongPtr
...
А! Ну вот же оно:
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
А вообще думаю, что последую ихним [
] рекомендациям пользуясь SetWindowLongPtr и подожду лонгхорна в своих руках....
ЗЫ: Чета я разболтался...
... << RSDN@Home 1.1.3 stable >>