1

私はVB6を初めて使用しますが、現在、テキサスチェーンソーの大虐殺の男の肌の顔のように、フォーム、クラス、モジュール、およびサードパーティのツールがすべてまとまった、恐怖のエディターのようなツールの維持を担当しています.. .

私が理解していないのは、アプリをデバッグモードで実行したときと、コンパイルして開発用PCで実行したときと、別のPCにインストールしたときとで異なる結果が得られる理由です。

はい、私は頭が悪いことを知っています。これについて詳しく知ることができる場所を教えてください。別のリンク、レジストリ関連など、現在取得していない接続のようなもの、つまりワックスオン、ワックスオフのようなものを見つけたいと思っています:P

主な問題は、QA からのいくつかのエラーをデバッグしようとしていて、これをテストするための予備の PC を見つける必要があるときです。また、コードがどこにあるのかわからないため、直接デバッグすることはできません。そのようにしてください。

ありがとう。

4

2 に答える 2

2

アプリをデバッグ モードで実行したときと、コンパイルして開発用 PC で実行したときの比較

コンパイル時に、ネイティブ コードまたは pcode にコンパイルするオプションがあります。デバッガーは、pcode のみを使用して実行されます。ネイティブ コードにコンパイルすると、まれに動作が変わる場合があります。この特定は本当にまれです。私はVB6がリリースされて以来使用しており、年に1、2回取得する可能性があります。私のアプリケーションは複雑な CAD/CAM で、形状を作成し、金属切断機を実行しており、2 ダースの DLL があります。典型的な状況ではありません。自宅で趣味のソフトウェアを使用していると、この問題に遭遇することはありませんでした。

イベント シーケンスの問題が原因で発生する別の種類のエラーがあります。VB6 は真のマルチタスキングではありませんが、現在のコード ブロックから飛び出してイベントを処理する機能があります。新しいイベントのために同じブロックに再び入ると、興味深いことが (控えめに言っても) 結果になる可能性があります。あなたのソフトウェアは非常にインタラクティブなタイプのソフトウェアであるエディターであるため、これが問題の原因である可能性が高いと思います。

一般に、問題は影響を受ける領域を並べ替えることで修正されます。MsgBox を挿入するか、テキスト ファイルに書き込み、現在地をログに記録して、影響を受けた領域を見つけます。MsgBox はタイミングまたはマルチタスクに関連する動作を変更する傾向があるため、テキスト ファイルにログを記録することをお勧めします。

VB6 がコード ブロックの途中でイベントが発生し、そこに DoEvents が浮かんでいる場合、コード ブロックはイベントを処理し、元のコード ブロックに戻ります。同じコード ブロックに再び入る場合、これが発生することを意図していなかった場合、問題が発生します。また、タイミングがそれぞれ異なるため、コンピューターごとに異なる問題が発生します。

この種の問題に対処する最も簡単な方法は、いくつかのフラグ変数を作成することです。マルチタスクの用語では、セマフォまたはミューテックスとして知られています。コードのクリティカル セクションに入ると、それを true に設定します。ルーチンを終了するときは、false に設定します。コードのそのセクションに入ったときにすでに true である場合は、それを実行しません。

別のPCにインストールしたとき。

これらは通常、間違った DLL がインストールされた結果です。ほとんどの場合、ターゲットには新しいバージョンがありますが、古いバージョンがあります。無料の Virtual PC をダウンロードし、Windows XP のクリーン インストールを作成して、これを再確認します。

問題がイベントのタイミングである場合、これもコンピューターによって異なる場合があります。これは、(MsgBox ではなく) 疑わしい領域をログに記録することによって検出されます。

スクリーン ショットまたは特定のエラーのテキストを表示できる場合は、より適切にサポートできます。

于 2009-02-05T13:34:54.957 に答える
0

最初に確認することは、VB6 dll のサービス パック バージョンを含む、アプリが依存するすべての dll のバージョンです。

動作の違いについて、より具体的な詳細はありますか?

于 2009-02-05T10:12:55.597 に答える