Fehler, Irrtümer, Fragen - Seite 1970

 
pavlick_:

Ich habe einen Fehler in meinem Skript, als ich versuchte, es zu lokalisieren, also ist es vorerst umgangen.

Ich glaube, ich habe es gefunden:

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 Wert = 4294967295

zurückgegebener Wert = 18446744073709551615

D.h. wir setzen die Farbe clrNONE für das Objekt, dann lesen wir die Farbe des Objekts und vergleichen sie mit clrNONE - sie konvergieren nicht.
 
pavlick_:

D.h. die Farbe des Objekts auf clrNONE setzen, dann die Farbe des Objekts lesen

Farbe eines anderen Objekts lesen
 

Ja, ich danke Ihnen. Ich habe die Namen dort korrigiert, aber der Fehler ist immer noch da.

 
pavlick_:

Setzen Sie das Objekt auf die Farbe clrNONE, lesen Sie dann die Farbe des Objekts und vergleichen Sie sie mit clrNONE - sie stimmen nicht überein.

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

clrNONE - alle Bits von 4 Bytes sind mit Einsen gefüllt.

ulong clr - alle Bits von 8 Bytes werden mit Einsen gefüllt.

 
pavlick_:

Ja, ich danke Ihnen. Ich habe die Namen dort korrigiert, aber der Fehler ist immer noch da.

In der Tat wird in ObjectGetInteger anstelle von

void ObjectGetInteger( long& x ) { x = clrNONE; }

.

void ObjectGetInteger( long& x ) { x = -1; }

Lösung: Schreiben Sie dann überall x statt x.

(color)x
 
fxsaber:

clrNONE - alle Bits der 4 Bytes sind mit Einsen gefüllt.

ulong clr - alle Bits von 8 Bytes werden mit Einsen gefüllt.

Ich glaube, hier liegt ein Fehler vor.

1. clrNONE ist eine positive 4-Byte-Zahl, da Alert( long(clrNONE) ) == 4294967295 (wäre sie negativ (Farbzeichen), würde sie ins Minus gehen)

2. Wir haben ihn in SetInteger in long umgewandelt, der Wert konnte sich nicht ändern

3. Warum erhalte ich eine nicht primäre Zahl in SetInteger?

Entweder wird die Farbe innerhalb des Terminals in einen Typ mit Vorzeichen umgewandelt, z. B. int, und wächst dann bei der Umwandlung in along, oder etwas anderes.

 
Nochmals vielen Dank an Sie alle. Ich bin mir fast sicher, dass die Innenfarbe zur Unterschrift gegossen wird, mit umgekehrtem Guss und Fehler. Nun, es liegt an den Entwicklern, ein gültiges ObjectGetInteger() zu schreiben, es braucht nur ein paar Zeichen: ObjectGetInteger() { return long((uint)internal_clr); }
 
Ist dies ein Fehler (unterschiedliche Arrays) oder nicht?
void OnStart()
{
  short Data[] = {1};
  short Data2[];
  
  StringToShortArray(ShortArrayToString(Data), Data2);
//  StringToShortArray(ShortArrayToString(Data), Data2, 0, ArraySize(Data)); // так массивы совпадут
  
  ArrayPrint(Data);  // 1
  ArrayPrint(Data2); // 1 0
}
 
fxsaber:
Ist dies ein Fehler (unterschiedliche Arrays) oder nicht?
nein, nur eine letzte 0 hinzugefügt.
 
Комбинатор:
Nein, es wird lediglich eine abschließende 0 hinzugefügt.

Eine Zeile oben hinzugefügt - angegeben, um die Länge der Zeile zu kopieren. Es begann zu passen. D.h. es stellt sich heraus, dass der Eingabeparameter count = -1 am Ende eine Null anfügt, während count = StringLen nichts anfügt. Nyuansyk!

Grund der Beschwerde: