Pointer truncation VS2003.NET
От: noesis  
Дата: 21.05.04 06:39
Оценка:
Ковырял свои код в
            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 >>
icq 323-145-728
Re: Pointer truncation VS2003.NET
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 21.05.04 06:45
Оценка: :)
Здравствуйте, noesis, Вы писали:

Гм, неплохо было бы хотя бы соседнюю ветку посмотреть
См. http://www.rsdn.ru/Forum/Message.aspx?mid=649055
Автор: Чили
Дата: 21.05.04

См. http://www.rsdn.ru/Forum/Message.aspx?mid=649059&amp;only=1
Автор: sergey_shandar
Дата: 21.05.04
getboost.codeplex.com
citylizard.codeplex.com
Re: Pointer truncation VS2003.NET
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 21.05.04 06:47
Оценка: 1 (1) :)
Здравствуйте, noesis, Вы писали:

N> И, кстати, может будет полезный совет, как лаконичнее записать 64 bit указатель в упомянутом SetWindowsLongPtr?


Наверное нужно использовать приведение к ULONG_PTR
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: Pointer truncation VS2003.NET
От: noesis  
Дата: 21.05.04 06:55
Оценка: :)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Наверное нужно использовать приведение к ULONG_PTR


Спасибо, тож думаю в этом напрвлении, что-то в этом духе
sergey_shandar: Точно надо поспать идти мне
... << RSDN@Home 1.1.3 stable >>
icq 323-145-728
Re: Pointer truncation VS2003.NET
От: Andrij Украина  
Дата: 21.05.04 08:57
Оценка:
Здравствуйте, noesis, Вы писали:

N>Ругается: Warning C4311 pointer truncation from 'cSQLInfo *' to 'LONG'

N>..64 bit truncated to 32 bit..

Штобы убрать етот ворнинг можно в Properties -> C++, для проекта, флаг "Detect 64-bit portability issues" поставить [b]"No"[b]
make it simple as possible, but not simpler
Re[2]: Pointer truncation VS2003.NET
От: noesis  
Дата: 21.05.04 09:43
Оценка:
Здравствуйте, 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 >>
icq 323-145-728
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.