2

OK、最初にもう少しコンテキストを与える必要があります。Visual Studio6で開発されたレガシーC++ソリューションに取り組んでいますが、Visual Studio 6 UIが嫌いなため、作業とデバッグを行いながら、VC6コンパイラでレガシーソリューションを構築するためにDaffodil拡張機能を備えたVisualStudio2010に切り替えました。 Visual Studio 2010で(そしてもう1つのボーナスとして、SourceSafe統合もVisual Studio 2010ではるかに優れています)。

ソリューションは正常にビルドされますが、実行されません。古いプロジェクトオーナーによると、これは、プロジェクトの1つに対してファイルがコンパイルされる順序が原因です。今まで彼はいつも正しかったし、私は彼を信じない理由がなかった。ここで、C ++でのファイルのコンパイル順序に規則がなく、Visual Studio IDEがファイル名に基づいてプロジェクト内のファイルをコンパイルすることをどこかで読んだと思います(ただし、明らかにVisual Studio 6 IDEではありません)。 Visual Studio 6プロジェクトの場合と同様に、ファイルのコンパイル順序と一致するコンパイル番号の昇順のソースファイル名。コンパイル順序はまだVisualStudio6プロジェクトのコンパイル順序と一致しません。それで、これに影響を与える他の方法はありますか、それとも私はこれを間違った方法で行っていますか?または、IDEは実際にソースファイル名ではなくヘッダーファイル名をチェックしてコンパイル順序を決定していますか?(ヘッダーファイル名を変更すると、コードが大幅に変更されるため、変更するのは気が進まなかった)。

PS:プログラムを実行するためにコンパイル順序が重要である理由や、これに対処する方法を理解することは私の意図ではありません。VisualStudio 2010のコンパイル順序に影響を与えて、それが重要であることを証明または反証できるかどうかを確認したいだけです。このプロジェクトのコンパイルの最終結果に。

更新:おそらくこれはファイル初期化の大失敗ではなくプロジェクトの所有者が間違っています。すべてのファイルを正しい順序で手動でコンパイルし(pwnyが提案)、プログラムを実行すると、「アプリケーションを正しく初期化できませんでした(0xC0000005)」という例外メッセージボックスが表示されます。プログラムは、コレクションオブジェクトへのnullpointerでインデクサーが使用されるポイントまで実行されているようです。関連付けられたファイルの拡張子は.cppではなく.temファイルです(インクルードされている.hppヘッダーファイルには.temファイルが含まれています)。1994年に作成されたmakefileプロジェクトでは、それ自体でビルドできません。コールスタックウィンドウからファイルに移動すると、デバッガーは情報の表示を拒否します。長い一日だったので、明日も続けます。おそらく、makefileプロジェクトをDLLに変換し、ファイルの名前を.cppに変更し、循環インクルードを削除して、最高のものを期待します。

4

0 に答える 0