tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルコントロールに余分な文字列が追加で表示される
記事No16280
投稿日: 2017/02/11(Sat) 22:14
投稿者tsururi
お世話になります。

VB6 で作成したアプリケーションで、稀に、
コントロールの文字列を表示している箇所の末尾に
余分な文字列が追加で表示される現象が発生しており、
原因、対処方法等が分からず、困っております。

・実行環境
  
  Windows 7 Professional SP1 32bit版
  Visual Basic 6.0 (SP6)


・現象発生時にコントロール上で表示される文字列
  
  「元々表示したい文字列」「余分な文字列」 の様に表示されます。
  
  確認できている範囲では、
  元々表示したい文字列の部分は文字が欠けたり、
  文字化け等の状態になっておらず、全て表示されています。
  
  余分な文字列の部分については
  記号や非常用漢字の様なものが多いのですが、
  一回だけ「pFocus」という文字列が付与される例がありました。


・その他
  
  複数の環境で発生しているのですが、
  アプリケーションを再起動すると現象が発生しなくなります。


原因として思い当たることなどは、ありませんでしょうか。
宜しくお願い致します。

[ツリー表示へ]
タイトルRe: コントロールに余分な文字列が追加で表示される
記事No16282
投稿日: 2017/02/13(Mon) 20:54
投稿者魔界の仮面弁士
> コントロールの文字列を表示している箇所の末尾に

複数の異なる種類のコントロールで再現するのでしょうか。(CommandButton, TextBox, ListBox…)
それとも、特定のコントロール限定で発生するのでしょうか。

発生するコントロールは、標準コントロールでしょうか、ActiveX コントロールでしょうか、
それとも自作のユーザーコントロールでしょうか。


> 原因、対処方法等が分からず、困っております。

可能性1:
  外部データ(ファイルやデータベース、シリアル通信など)を取り込んでいる箇所があり、
  その外部データに予期せぬゴミデータが混入していて、それが問題を引き起こしている。

可能性2:
  複数の箇所から読み書きされるようなグローバル変数が存在しており、
  それがコーディング漏れで「前回の処理結果」をクリアしないまま
  次の回の処理データが書き込まれてしまい、文字列データが破損している。

可能性3:
  API の呼び出し方が誤っており、本来は参照するべきでは無い位置のメモリに
  書き込みを行われることで、他の変数を破壊されている。もしくは、文字数と
  バイト数を混同した読み書きが行われることで、本来読み取るべき範囲を超えて
  メモリの読み込みが行われ、未初期化領域のデータが文字列として読み込まれてしまった。

可能性4:
  固定長文字列型とバイナリデータの変換処理において、
  変数サイズと文字数とバイト数の関係性を見誤っており、
  データの加工に失敗している。

[ツリー表示へ]
タイトルRe^2: コントロールに余分な文字列が追加で表示される
記事No16283
投稿日: 2017/02/14(Tue) 12:47
投稿者tsururi
魔界の仮面弁士 様
ご回答頂き、ありがとうございます。
他の投稿に対するご返信も常々、参考にさせて頂いております。


> 複数の異なる種類のコントロールで再現するのでしょうか。(CommandButton, TextBox, ListBox…)
> それとも、特定のコントロール限定で発生するのでしょうか。

予め併記するべきところでした。申し訳ありません。

数の少ないコントロールについては断定できないのですが、
特定のコントロールで発生する傾向はあるように思います。


> 発生するコントロールは、標準コントロールでしょうか、ActiveX コントロールでしょうか、
> それとも自作のユーザーコントロールでしょうか。

以下のコントロールで発生を確認しております。
これらについては、標準コントロールをそのまま利用しております。

・CommandButton
・CheckBox

以下のコントロールは数もそれなりにあるのですが、発生を確認しておりません。

・Label
・OptionButton
・Menu

Label に関してはユーザーコントロールのものも利用しておりますが、
標準コントロール、ユーザーコントロール共に、発生を確認しておりません。

現象が発生しなかったコントロールは他にもあるのですが、
コントロール数が少ないという理由から、あまり確かではないと考えております。
(ComboBox、RichTextBox、TabStrip(Microsoft Windows Common Controls 5.0 (SP2)) 等)


> 可能性1:…、可能性2:…、可能性3:…、可能性4:…

ご提示、ありがとうございます。

アプリケーションで DB からの読込、Windows API 等の利用や、
文字列とバイナリの変換処理を行っているため、
全ての可能性について当てはまるようです。
解決に時間は掛かりそうですが、それぞれの可能性を当たってみようと思います。

[ツリー表示へ]