Приветствую.
Наткнулся на странную ошибку. Пишу dll-ку на c++11 в qt-creator с mingw. Есть структура данных которая передается по указателю в функцию. Эта структура содержит переменную amount типа int64_t (пробовал long long, результат идентичен).
struct {
...
int64_t Amount;
...
};
Присваиваю этой переменной тестовое значение 1002:
...
Info->Amount = 1002;
...
Сторонняя программа (виндовая), которая использует мою dll, говорит что значение amount равно 4303557230592 (если присваивать не константу а int получаю тоже самое).
В процессе поиска ошибки декомпилировал мою dll, ida hex-rays показала:
...
*(_DWORD*)(a5 + 332) = 0;
*(_DWORD*)(a5 + 336) = 1002;
...
Посидел подумал.
Если конвертнуть 1002 в hex получится 3EA.
Если после этого числа добавить еще 8 нулей в hex (4 байта забитые 0-ми) то получим 0x3EA00000000. Если это число сконвертировать обратно в dec получим 4303557230592. Как раз то самое число, которое я получаю в сторонней программе.
Подскажите пожалуйста как такое вообще получается. И как мне без костылей сделать правильное присвоение в int64.
Линукс тут при том что сайт opensource.com а я использую опенсорсные технологии в проекте:)