Windows 2000 の COMDLG32.DLLのバグ?

拡張カーネル使ってる外国人の人から、Adobe Illustrator CS4辺りから、データの保存や読み出しができなくなってるという報告を受けました。

|。・ω・) 。o ( あれ?それってどっかで聞いたような症状… )

Win2000で全く使えないと思われていた CLIP STUDIO PAINT PRO

そうなんです、クリップスタジオと同じなのです。
というわけで、共通点さえわかれば解析ができます。

   OPENFILENAMEA ofn;
   memset(&ofn,0,sizeof(ofn));
  
ofn.lStructSize=sizeof(ofn);
  
ofn.lpstrFilter= "text file(*.txt)\0*.txt\0all file(*.*)\0*.*\0\0";
  
ofn.lpstrFile= filename;
  
ofn.Flags= OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  
ofn.lpstrDefExt= "txt";
  
ofn.nMaxFile= 0x10000;
  
int t1=GetOpenFileNameA(&ofn);

試しに書いたコードはこれなんですが。Windows 2000で実行するとt1=0になります。
…が、GetLastError の返り値もゼロなのです。

どういうことか。
nMaxFile を 0xffff 以下にすると関数は成功します。
通常ファイルパスは 最大でも 32k なのですが、手を抜いたプログラマが 64Kとか、とんでもなくでかいメモリを確保して動かす処理をしたところ、Windows 2000では 異常を検出して動かなくなったというわけだったのです・ω・ なんてことだ!

数年来の謎が解けたよ!

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です