エラー、バグ、質問 - ページ 1970

 
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);
         }
         
      }
   }

アラート

clr == clrNONE ? false

clrNONE 値 = 4294967295

返された値 = 18446744073709551615

つまり、オブジェクトに色clrNONEを設定し、オブジェクトの色を読み取って clrNONEと比較したところ、両者は収束しませんでした。
 
pavlick_:

すなわち、オブジェクトの色をclrNONEに設定し、オブジェクトの色を 読み取る

よみかえる
 

はい、ありがとうございます。そこで名前を直したのですが、エラーはそのままです。

 
pavlick_:

オブジェクトの色をclrNONEに設定し、オブジェクトの色を 読み、clrNONEと比較します。

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

clrNONE -4 バイトのすべてのビットが1で埋め尽くされます。

ulong clr -8 バイトの全ビットが1で埋め尽くされます。

 
pavlick_:

はい、ありがとうございます。そこで名前を直したのですが、エラーはそのままです。

実際には、ObjectGetIntegerでは、代わりに

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

.

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

解決策:それなら、どこでもxの代わりにxと書けばいい。

(color)x
 
fxsaber:

clrNONE -4 バイトの全ビットが1で埋め尽くされます。

ulong clr -8 バイトの全ビットが1で埋め尽くされます。

ここに何らかの誤りがあると思われます。

1.Alert( long(clrNONE) ) == 4294967295 なので、clrNONEは正の4バイト数(もし負(色記号)ならマイナスに入る)。

2.SetIntegerでlongに変換したところ、値が変更できなくなった

3.SetIntegerでプライマリでない数値が表示されるのはなぜですか?

端末内部で色が符号付き型、例えばintに変換され、alongに変換されると大きくなるのか、それとも別の何かか。

 
あらためて、ありがとうございました。インサイドカラーは、逆キャストで誤差があるため、サイン入りで鋳造しているのはほぼ間違いないと思います。ObjectGetInteger() { return long((uint)internal_clr); } というように、数文字で済むので、開発者次第で有効なObjectGetInteger() を書けます。
 
これはエラー(異なる配列)なのか、そうでないのか?
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:
これはエラー(異なる配列)なのか、そうでないのか?
はなく、最後に0が追加されただけです。
 
Комбинатор:
いいえ、終端の0を追加するだけです。

上の行を追加 -行の長 さをコピーするように指定。合わせるようになった。つまり、入力パラメータcount = -1では末尾に0が追加され、count = StringLenでは何も追加されないことが判明したのです。ニュアンスィーク!