Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.BINKD
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.BINKD с датами от 14 Jul 13 17:53:22 до 24 Apr 24 18:49:04, всего сообщений: 1924
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 53 из 1924 =========================================== RU.BINKD =
От   : Yuri Myakotin                    2:5020/4441.1      17 Oct 13 20:41:42
Кому : Pavel Gulchouck                                     17 Oct 13 20:41:42
Тема : То ли лыжи не едут...
FGHI : area://RU.BINKD?msgid=2:5020/4441.1+52601348
На   : area://RU.BINKD?msgid=2:463/68+525fe1a1
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.BINKD?msgid=2:463/68+52604149
==============================================================================
Hello Pavel!

Thursday October 17 2013 16:05, Pavel Gulchouck wrote to Yuri Myakotin:

YM>> Вообще, с хэндлами и указателями в коде под x64 версию нужно
YM>> аккуратнее, они ж там никак не int (32бит)

PG> Нет ли у MSVC опции считать int (или хотя бы long) 64-битным на
PG> 64-битной системе?
похоже что нет. Только size_t автоматически 4байта в 32бит и 8байт в 64. А long - синоним int (long long = int64)
MSVC вообще варнинги выдает при использовании в присвоении разных типов, даже если они в реальности одно и то же - дабы программеры использовали специализированные типы, а не универсальные типа int или void * - как раз для того, чтобы при изменении размерности типов не переписывать заново код.


PG>  Боюсь, если handle (socket, size_t, time_t, void* и
PG> т.д.) по размеру больше, чем int, там ещё много граблей вылезет. :(
Ага. Собственно, потому-то лучше int с хэндлами и указателями вообще не использовать, или задать собственный тип - что-то навроде
#ifdef (WIN64)
#define INT long long
#else
#define INT int

и пройтись по всему коду реплейсом.

PS: что MS по этому поводу пишет: http://msdn.microsoft.com/en-us/library/3b2e7499.aspx

[cut]
When you use Visual C++ to create applications to run on a 64-bit Windows operating system, you should be aware of the following issues:

An int and a long are 32-bit values on 64-bit Windows operating systems. For programs that you plan to compile for 64-bit platforms, you should be careful not to assign pointers to 32-bit variables. Pointers are 64-bit on 64-bit platforms, and you will truncate the pointer value if you assign it to a 32-bit variable.

size_t, time_t, and ptrdiff_t are 64-bit values on 64-bit Windows operating systems.

time_t is a 32-bit value on 32-bit Windows operating systems in Visual C++ versions before Visual C++ 2005. time_t is now a 64-bit integer by default. For more information, see Time Management.

You should be aware of where your code takes an int value and processes it as a size_t or time_t value. It is possible that the number could grow to be larger than a 32-bit number and data will be truncated when it is passed back to the int storage.

The %x (hex int format) printf modifier will not work as expected on a 64-bit Windows operating system. It will only operate on the first 32 bits of the value that is passed to it.

Use %I32x to display an integer on a Windows 32-bit operating system.

Use %I64x to display an integer on a Windows 64-bit operating system.

The %p (hex format for a pointer) will work as expected on a 64-bit Windows operating system.
[cut]


See all in Hell,
Yuri
--- Мессагомаратель 1.1.5-b20110320
* Origin: Убей человека. Прежде всего в самом себе. (2:5020/4441.1)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.057932 секунды