諏訪通信ネットワーク
スポンサードリンク
製品情報 ダウンロード サポート お知らせ
   


ソフトウェア

for Windows
Xp Vista 7 10

Keyboard IE
カーナビを...
ダイアグスキャナー
徒歩メーター
燃費ティーチャー

サンプリングメーター
みるCAN
CANメッセンジャー
CANレコーダー
CANレーベル



コーヒーブレイク

VB6の長所と短所
なぜVB6を使うのか
VB6のトラブル集1
VB6のトラブル集2
UWPのトラブル集1
C言語のコメント作法
C言語の常識ルール



蓼科電研

クルマ整備技術サイト
蓼科電研オートモーティブ















VB6のトラブル集2 IDE編
2019.1.5
2019.2.9 更新


Windows10で使用していると色々とトラブルがあるのでまとめてみました。
Googleで検索するとより詳しく出てくる内容もあるかもしれません。





No.0004 作成日:2019.2.8
コントロール配列を使ってみたら、挙動がおかしくなりました。

原因
コントロール配列は配列ですが、一般的な配列とは異なった仕様になっています。 コントロール配列でボタンやテキストボックスなどを配置した場合、 自動で小さな数字がIndexとして割り当てられます。 通常は0、1、2、3、4、5、6と昇順で割り当てられます。 しかしルール上、このIndexの数字は自由に決められます。 例えば0、2、4、6と割り当てて、 1、3、5がなかったとしてもエラーになりません。 デバッガーは数字が抜けていることを教えてくれません。

例えばIndexが0〜7までのTextBoxのコントロール配列があったとします。
以下のようなコーディングをした場合、普通の配列であれば i = 8 のときに デバッガーがエラーを出して停止します。

  i = 0
  Do While i <= 8
    TextBox(i).Alignment = 1
    i = i + 1
  Loop

しかしこの場合はエラーが出ずにこのまま進みます。 当然ですが範囲外にデータを書き込むことになるので、メモリリークになります。 この後に何かの処理があれば正常に動作しない場合があります。 何事もなかったかのように動き続けることもあります。 しかしデバッガーでは一切の警告をしてくれません。


対策
コントロール配列は配列ですが、割と自由な仕様であるためか、 間違ったことをしてもエラーで教えてくれません。 できることは以下のことぐらいです。

・配列のIndexは、必ず0から連番で振っていく
・以下の各プロパティを活用する
 コントロール配列全体を示すプロパティですので、Indexは指定しません。

  Count : コントロール配列の要素数
  UBound : コントロール配列のIndexの最大値
  LBound : コントロール配列のIndexの最小値

例えば上のソースの場合は以下のようにすれば、うっかり削除してしまった等の何らかのミスでコントロール配列の要素数が変動した場合に気づくことができます。
Indexのカウントアップの判定には UBound もしくは Count - 1 を使用します。

  If TextBox.Count - 1 <> TextBox.UBound Then
    Call MsgBox("コントロール配列 TextBox の要素数が異常です。", _
          vbCritical, "構文エラー")
  End If

  i = 0
  Do While i <= TextBox.UBound
    TextBox(i).Alignment = 1
    i = i + 1
  Loop






No.0003 作成日:2019.2.1
デバッグ中にIDEごとフリーズしてしまう。IDEの挙動がおかしくなる。IDEが落ちてしまう。

原因
デバッグ中のIDEは、プログラムも含めて1つのシングルスレッドで動いているようです。 そのため、ソースコードに無限ループがあるとIDEごとフリーズしてしまいます。 メモリリークのようなバグがあるとそのまま落ちてしまいます。
これはOSによらず、WindowsXP等でも同じように発生します。 ただし、WindowsXPではIDEごとすぐに落ちる場合でも、Windows10では落ちずにフリーズしたり不安定な動作のまま残る場合があります。


対策方法
VisualStudio2010などと比べると貧弱なIDEであるため、バグのない完璧なソースをコーディング心がけるしかありません。
プロジェクトは、こまめに上書き保存をする癖も必要てす。実行時に自動保存してくれる機能はなく、未保存のプロジェクトを復元してくれるような優しい機能もありません。
例えば最初にバグだらけのコードを一気に書き上げる方法や、デバッガーに頼って修正していくやり方に慣れていると、VB6はシビア過ぎて挫折してしまうでしょう。





No.0002 作成日:2019.2.1
IDEからプログラムを実行すると、OLEDragModeやOLEDropModeが有効にならない。ファイルやフォルダをコントロールにドラッグしても禁止マークになってしまう。

原因
不明です。
Windows7等では正常にできますが、Windows10で現象が発生します。


対策方法
EXEファイルを作成して、EXEファイルから実行するとOLEが正常に機能します。
IDEから実行すると利用不可(禁止)になってしまうようです。





No.0001 作成日:2019.1.5
プロジェクトを開くときに 「MSCOMCTL.OCX を読み込めません。--プロジェクトのロード を続けますか?」と出る

プロジェクトを開くときに以下のエラーが出ることがあります。
「はい」を押して正常に開くことができてビルドやソフトの動作に問題がない場合は、 プロジェクトを上書き保存します。するとエラーが出なくなります。



以下のエラーが続けて出た場合は正常に開くことができていません。 この場合は、プロジェクトを上書き保存してはいけません。調べ方や対策方法は以下の通りです。




原因
MSCOMCTL.OCXのバージョンが違うために発生します
具体的には、開発時にインストールされていたMSCOMCTL.OCXが新しく、 Windowsの再インストールや他のパソコンにプロジェクトのフォルダを移動させたときに インストールされているMSCOMCTL.OCXが古いと発生します。


対策方法
以下の2つの方法があります。

@ MSCOMCTL.OCXを最新にする
A プロジェクトファイルを修正する

通常は最新の MSCOMCTL.OCX をインストールする方法を選択します。
2019年1月現在での最新の MSCOMCTL.OCX は、KB3096896 公開日: 2016/01/08 をインストールすることで置き換えられます。 このMSCOMCTL.OCXのバージョンは2.2です。

業務上において、契約や制約などによって安易に最新バージョンがインストールできない場合は、 止むを得ずプロジェクトファイルを修正する方法を採ります。
方法は以下の通りです。

1) プロジェクトファイル、拡張子がvbpのファイルをメモ帳等のテキストエディタで開きます。

MSCOMCTL.OCX と記載されている行を探します。 すると#2.2という記載があります。これが開発時に使用していたMSCOMCTL.OCXのバージョンを示します。 つまりバージョン2.2が使われていたことになります。 この行に記載されている {831FDD16-0C5C-11D2-A9FC-0000F8754DA1} をいう記載をメモ帳等にコピペしておきます。



2) メニューでregeditとキーボード入力をしてレジストリエディタを起動します。



先頭の HKEY_CLASSES_ROOT を選択しておきます。 [編集]-[検索] で先ほどコピペしておいた 831FDD16-0C5C-11D2-A9FC-0000F8754DA1 を検索します。 このとき、先頭と末尾の{}は外しておきます。 すると以下のように結果が表示されます。ここにあるVersionの数値がインストールされているMSCOMCTL.OCXのバージョンです。 ここでは2.1となっています。



3) 最初に開いたプロジェクトファイル、拡張子がvbpのファイルの MSCOMCTL.OCX と記載されている行のバージョンを数値を、インストールされているバージョンに置き換えます。 今回の場合は、#2.2 の部分を #2.1と修正します。修正して保存すれば完了です。 正常にプロジェクトを開くことができます。ただしまれにエラーが出る場合があります。




スポンサードリンク

 Copyright (C)1999-2021 SUWA TSUSHIN NETWORK. All Rights Reserved.
ご利用条件