ListViewコントロールにおいて、カラムヘッダをクリックするとVB6.exeが落ちる

解決


ミチ  2004-11-03 01:28:51  No: 117336

WinXP+VB6sp6の環境において、ListViewコントロール(lvwReport形式)のカラムヘッダを何回かクリックすると、以下のようにVB6.exeが落ちてしまいます。

【VB6.EXE - アプリケーション エラー】
例外 unknown software exception (0x0000094) がアプリケーションの 0x2758e4c5で発生しました。

↓OKを押すと、

【VB6.EXE - アプリケーション エラー】
"0x27618848" の命令が "0x059b1e90" のメモリを参照しました。メモリが "read" になることはできませんでした。

複数のプログラム、複数の画面にて同様の現象を確認しました。
これは何が原因なのでしょうか。VBのバグでしょうか。
分かる方いらっしゃいましたら教えてください。よろしくお願いします。


魔界の仮面弁士  2004-11-03 01:46:15  No: 117337

AllowColumnReorder プロパティを True にした状態、すなわち、
列位置変更可能なListViewにおいて、列をドラッグしようとすると
致命的なエラーが発生します。
(4月の時点で、MSにも障害扱いとして記録されています)

なお、現象としては、
・AllowColumnReorder を有効にしていると発生します。
・SP5では再現せず、SP6で再現します。
・XP/2003で再現しますが、2000以下では再現しません。
となっています。

現状では、再現しない組みあわせにする事で回避してください。


ミチ  2004-11-03 06:28:53  No: 117338

魔界の仮面弁士さん、ありがとうございます。
AllowColumnReorderはFalseになっています。カラムをドラッグではなく、単にクリックを何回かしただけで落ちてしまうんですよね…。
(落ちる状況としては同じ感じです。)

ランタイムはVB6SP6のものを使っているんですが、他のパソコン(WinXP/Win2000)では落ちなかったんです…!
なぜだかわかりません。
他に可能性はなにか考えられるでしょうか・・・。


魔界の仮面弁士  2004-11-03 12:48:42  No: 117339

> AllowColumnReorderはFalseになっています。
> カラムをドラッグではなく、単にクリックを何回かしただけで落ちてしまうんですよね…。

あれれ。私が認識している物とは、別の現象なのかな?

ちょっと確認させてください。
新規プロジェクトを追加し、そこにListViewを貼って下さい。
プロパティ設定等は、初期値のままにしておきます。

そして、下記のコードしか書いていない状態で、ListViewの
ヘッダをクリックしてみてください。やはり、エラーになりますか?

なお、ヘッダの操作はドラッグではなく、クリック操作でお願いします。
(クリック時には、マウスカーソルは、1ドットたりとも移動させないでください)

Option Explicit
Private Sub Form_Load()
  With ListView1
    .View = lvwReport
    .AllowColumnReorder = False   '当方では、Trueの時のみ落ちる
    With .ColumnHeaders
      .Add Text:="1列目"
      .Add Text:="2列目"
      .Add Text:="3列目"
    End With
    With .ListItems.Add(Text:="1-1").ListSubItems
      .Add Text:="1-2"
      .Add Text:="1-3"
    End With
    With .ListItems.Add(Text:="2-1").ListSubItems
      .Add Text:="2-2"
      .Add Text:="2-3"
    End With
    With .ListItems.Add(Text:="3-1").ListSubItems
      .Add Text:="3-2"
      .Add Text:="3-3"
    End With
  End With
End Sub

> 他のパソコン(WinXP/Win2000)では落ちなかったんです…!
2000では、その現象は起きないという報告を受けています。
問題は、XP の方ですね。

開発環境のXPでは落ちるが、実行環境のXPでは落ちないとの事ですので、
両者の比較を行って見てください。

・XPの標準ビジュアルスタイル(Lunaモード)を使っていますか?
  それとも、クラシックモードを使っていますか?
・mscomctl.ocxのバージョンは同じですか?(SP6版は 6.1.97.82 です)

なお、当方で検証した限りでは、SP6適用後であっても、
何らかの理由で mscomctl.ocx が更新されていない場合は、
エラーは発生しないようです。

# WinXP + VB6/SP6の環境で、mscomctl.ocx だけを
# バージョン 6.0.81.77 に 差し替えてみた所、
# AllowColumnReorder = True でも正常動作しました。

> 他に可能性はなにか考えられるでしょうか・・・。

プログラムのバグなら別ですが、通常の運用でエラーが出る場合は、
掲示板に質問するのではなく、MSのサポートに問い合わせた方が良いですよ。


ミチ  2004-11-03 20:04:59  No: 117340

申し訳ありません・・。

> そして、下記のコードしか書いていない状態で、ListViewの
> ヘッダをクリックしてみてください。やはり、エラーになりますか?

これでテストしてみたのですが、エラーになりませんでした。
何故だ?とエラーになったプログラムをよーく見てみると…
AllowColumnReorderの値が、プロパティウィンドウではFalseになっているのですが、プログラム中でしっかりと「AllowColumnReorder = True」の記述が・・。
きっと、「クリックしたとき」というのも、微妙にドラッグされていたのですね…。

はい。魔界の仮面弁士さんのご指摘の通り、MSの障害が原因でした。
本当に申し訳ありませんでした。

でも原因が分かってスッキリしました!dllのバージョンやvbの環境もいろいろ調べてみても原因が分からなかったので…。
本当に助かりました。魔界の仮面弁士さん、ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加