tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^4: IDEノーエラー,exeにてエラー。 その他1件
投稿日: 2015/02/02(Mon) 11:30
投稿者まさお
花ちゃん さん、ありがとうございます。

>  Do While True 元々のコードと同じなら IDE 上でも無限ループに
>             If UBound(DimTs) < i Then Exit Do  '意味がない
>
 イイエ。 IDE上でもexeファイル上でもここでは無限ループになりません。
 下記@を確認願います。

>             DimTs(i).flg = False           '目的は
>
 下記Aを確認願います。


  Do While True '<=一見無限ループに見えますが違います。※β参照。
     For i = 0 To UBound(DimTs)
        With DimTs(i)
          If .flg Then Exit For '※α
            '↑DimTs(i).flg=TrueならForループからExitします。
            ' DimTs(i).flg=Trueが無ければForループからExitせず
            ' Forループが完了します。

        End With
     Next
     '↑Forループが完了すると UBound(DimTs) < i になります。

     If UBound(DimTs) < i Then Exit Do '※β
       '@↑Forループが完了すると(※αでExitしていなければ
       '( つまり DimTs(i).flg=True が無ければ)
       'UBound(DimTs) < i が成立するので Exit Do します。
       '従って Do While True は無限ループになりません。
    
     DimTs(i).flg = False
       '↑※αでExitしていたら、その配列要素.flg=Falseにします。
       'A従っていつかは全ての配列要素.flg=Falseになります。
       '従って※βの If文 はいつかは必ず成立します。
      
  Loop

> Private Sub f_Test(ByRef DimTs() As Type_T)
> の部分も変更していますか?(宣言したのと違いますが、固定配列/動的配列)
>
 ご指摘の意味が良く判りません。
  Private Sub Test()
    Dim DimTs(0) As Type_T '<=固定配列にしたら…
    Call f_Test(DimTs)
  End Sub
  Private Sub f_Test(ByRef DimTs(0) As Type_T) '<=仮引数も固定配列にすべき ※γ
    …
  End Sub
 という意味ではありませんよね。
 ※γにするとコンパイルエラーになりますので。
 申し訳ありませんが、ご指摘の意味を教えて下さるとありがたいです。

> 間違いだらけのコードを掲載されても判断のしようがありません。
>
 どこがどのように間違っているのかを知りたく質問させて戴いています。

> エラーを発生させたいのならそのようなコードを書かないといけないし、
 …
> 事象が再現できるコードか、元のコードを投稿して頂かないと、…
>
 少なくとも私の環境では掲示したコードでIDEでは問題なくexeファイルだけでエラーが発生します。
 つまり「事象を再現できます」。

> 文法間違いのコードでは。
>
 「文法間違い」とはコンパイルエラーではなく「論理(フロー)間違い」との事だと思います。
 具体的にはどこに間違いがありますでしょうか?

> そもそも、間違っているから、配列が固定されているエラーがでているのでは?
>
 間違っている箇所は判っています。
  For i = 0 To UBound(DimTs)
    With DimTs(i)
      If .flg Then Exit For
    End With
  Next
 にてWith 〜 End With の中でループからExitしているからです。
    ※End With を実行する前に Exit For で抜けているので配列が固定されている、と推測しています。
 元投稿に記しましたが With 〜 End With の三行を If DimTs(i).flg Then Exit For の一行に変えればエラーは発生しません。
 私が知りたいのは
 1)何故Exeでだけエラーになるのか?
 2)何故On Error Goto 文以降のエラーで無限ループになるのか?
 なのです。

> (ReDim ステートメント等を使って宣言し直ししていないようだし)
>
 ReDimステートメントの必要性が判りませんが、あるいは別プロシージャに仮引数として渡す配列は、実引数では固定配列ではなく動的配列にすべき、という意味でしょうか?
 固定配列/動的配列のどちらでも本エラーは発生します。
  Sub Test
    Dim DimTs(0) As Type_T
を、
    Dim DimTs() As Type_T
    ReDim DimTs(x)   xは'0','1','9' 等なんでもOK
に変えても本エラーは発生します。

> EXE だけの問題なら、どのようにコンパイルされているのでしょうか?
>
 単純に メニュー > ファイル(&F) > ….exe の作成(&K) を実行しています。

> 一度 P-Code コンパイルでどうなるか試して見て下さい。
>
 「P-Code コンパイル」を実行したことが無いので良く判りません。
 方法等、調べてから試行してみます。


引き続きアドバイス戴ければありがたいです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。