D&Dについて
furafura  2015/12/08(Tue) 10:00
お世話になっております。
次期公開版、大変楽しみにしております。

以前からあった現象ですが、私の作っている画像コンバータのバグかと思って放置していたのですが、調べると挙動不審なのでお伝えする事にしました。

void Main()
{
while (System::Update())
{
// 何かがドロップされたら
if (Dragdrop::HasItems())
{
// ドロップされたすべてのアイテムを取得
const Array<FilePath> items = Dragdrop::GetFilePaths();

int i = 0;
for (const auto& item : items)
{
Println(i++);
Println(item);
}
}
}
}
そちらのD&Dのサンブルとほとんど同じですが、例えば350個のファイルをD&Dした時、最終的にカウントされる数値がバラバラで安定していません。
349もありますが、5とか200前後とかの時やらいろいろです。
私の環境がおかしくなければ、再現性は高いと思われます。
上限値があるようでしたら教えて下さい。
Reputeless  2015/12/08(Tue) 18:46
ご報告ありがとうございます。

こちらの環境では再現できませんでしたが、大量にファイルをドロップした際に取得漏れが生じる可能性が実装に見つかりました。
今後のバージョンで修正いたします。修正状況については http://play-siv3d.hateblo.jp/entry/WorkInProgress に掲載します。
furafura  2015/12/12(Sat) 10:08
現時点では意味の無い検証かも知れませんが…。
以下のプログラムにして、Windows8.1、June 2015 v2を使用、PC起動後まもなく実行してみました。

void Main()
{
UINT i;

while (System::Update())
{
// 何かがドロップされたら
if (Dragdrop::HasItems())
{
// ドロップされたすべてのアイテムを取得
const Array<FilePath> items = Dragdrop::GetFilePaths();

i = 0;
for (const auto& item : items)
{
i++; // カウント
Println(item);
}
LOG(L"count:", i);
}
}
}

これに対し、なんと9736個のファイルを1回D&Dしてみました。
9736個という大量D&Dが好ましいかは別にします。

デバッグモードでのログですと
count:178
count:853
count:1409
count:1734
となって例外が発生。

リリースモードでは、
count:281
count:555
count:487
count:508
count:428
count:375
count:350
count:345
count:266
count:293
count:270
count:269
count:249
count:243
count:231
count:213
count:215
count:198
count:199
count:189
count:190
count:178
count:186
count:160
count:167
count:164
count:158
count:159
count:153
count:148
count:144
count:143
count:138
count:145
count:133
count:134
count:132
count:127
count:134
count:119
count:124
count:121
count:124
count:124
count:67
と出て、
281+555+487+508+428+375+350+345+266+293+270+269+249+243+231+213+215+198+199+189+190+178+186+160+167+164+158+159+153+148+144+143+138+145+133+134+132+127+134+119+124+121+124+124+67=9,736
になりました。

期待する挙動としては、
count:9736
の1発表示なのですが、そうなっていなかったという事で念のため御報告致します。
Reputeless  2015/12/12(Sat) 13:07
情報提供ありがとうございます。
Reputeless  2015/12/20(Sun) 23:09
Siv3D January 2016 で上記の問題を修正し、例外が生じないようにしました。
ご報告ありがとうございました。

- WEB PATIO -