Ошибки, баги, вопросы - страница 1969

Первоначально было несколько модулей. Все работало нормально. В связи с ... решил временно все преобразовать в один.
Результат: программа стала работать по-другому.
Выяснилась причина:

#ifndef _WIN64 //добавлено
class A {
public:
        A() { Print( a ); } //Результат: 0 //не может быть
        static const int a; //(1)
}; 
static A *a = new A;    //(2)
const int A::a = 1;     //(3)
void OnStart() {}
#endif

Почему получилась именно такая последовательноть строк точно установить не удалось (обычно реализация\инициализация идет сразу за объявлением). Возможно сказалось взаимное пересечение классов

Не знаю как именно поступает С++ компилятор, но там Результат: 1 (как и ожидалось)

Ошибка, чтение барахлит.

   ulong l[] = {ULONG_MAX};
   ulong l2[1];
   {
      int file = FileOpen("ttt", FILE_WRITE|FILE_BIN);
      FileWriteArray(file, l);
   }
   {
      int file = FileOpen("ttt", FILE_READ|FILE_BIN);
      FileReadArray(file, l2);
   }
   Alert(l[0] == l2[0]);
   Alert(l[0], "   ", l2[0]);
   return;

Alert:

false 

18446744073709551615   10000000

Hex образ числа в файле: FF FF FF FF FF FF FF FF

pavlick_:

Ошибка, чтение барахлит.

Не чтение а инициализация массива. Уберите фигурные скобки.

Торможу, щас перепроверю.
Комбинатор:

Не чтение а инициализация массива. Уберите фигурные скобки.

Без них вообще не компилирует ('l' - invalid array access). В любом случае - в файле число верное.

Подозреваю первый хендл закрыть надо или открыть с флагом FILE_SHARE_READ
Комбинатор:
Подозреваю первый хендл закрыть надо или открыть с флагом FILE_SHARE_READ

Благодарю за интерес. Так и есть. Закрыл хендлы, сейчас работает правильно. Завелась у меня ошибка в скрипте, пытаюсь локализовать, значит пока мимо.

pavlick_:

Завелась у меня ошибка в скрипте, пытаюсь локализовать, значит пока мимо.

Вроде нашёл:

if(sizeof(color) <= sizeof(ulong))
   {
      
      if( ObjectCreate(0, "any_object", OBJ_TREND, 0, 0, 0)  &&
          ObjectSetInteger(0, "any_object", OBJPROP_COLOR, clrNONE) )
      {
         ulong clr;
         if( ObjectGetInteger(0, "any_object", OBJPROP_COLOR, 0, clr) )
         {
            Alert("clr == clrNONE ?  ", clr == (ulong)clrNONE);
            Alert("clrNONE value = ", (ulong)clrNONE);
            Alert("value that was returned = ", clr);
         }
         
      }
   }

Alert:

clr == clrNONE ?  false

clrNONE value = 4294967295

value that was returned = 18446744073709551615

Т.е. устанавливаем объекту цвет clrNONE, следом читаем цвет объекта, сравниваем полученное с clrNONE - они не сходятся.
pavlick_:

Т.е. устанавливаем объекту цвет clrNONE, следом читаем цвет объекта

читаем цвет другого объекта

Да, спасибо. Я там имена подправил, но ошибка всё равно осталась.

pavlick_:

устанавливаем объекту цвет clrNONE, следом читаем цвет объекта, сравниваем полученное с clrNONE - они не сходятся.

Alert("clr == clrNONE ?  ", (color)clr == clrNONE); // true

clrNONE - все биты 4-х байт заполнены единицами.

ulong clr - все биты 8-и байт заполнены единицами.