0

Windows 7 64 ビットのすべてのサービス パックを使用して、Visual C++ 6.0 の非 Unicode デバッグ モードで 32 ビット ATL プロジェクト (COM ライブラリ) をコンパイルできます。どちらの場合でも問題なく動作します: 通常に実行する場合と管理者として実行する場合です。

ただし、Unicode 以外のリリース ビルドは失敗します。

まず、VC++ コンパイラはインクルード ファイル (Platform SDK に属しているため、別のフォルダーにあった schannel.h など) を見つけることができませんでした。リリース ビルドでは、VC++ 自体のコア インクルード フォルダーのみがコンパイラーによってスキャンされました (オプションでプラットフォーム SDK のフォルダーが指定されていたにもかかわらず、デバッグ モードでは問題はありませんでした)。SDK から Program Files (x86) 以外の場所にインクルード ファイルをコピーしようとしましたが、VC++ 6.0 は UAC の問題で十分ではない可能性がある (そして、元の制限された場所にあるインクルードに何らかの方法でアクセスできなかった) と考えましたが、そうではありませんでした。ヘルプ。最後に、コンパイラが見つけられなかったすべてのファイルを VC++ 自体のインクルード フォルダーにコピーしました。

現在、コンパイラは新しい方法で文句を言います (ほんの数例): C:\Program Files (x86)\Microsoft Visual Studio\VC98\INCLUDE\wintrust.h(139) : error C2143: syntax error : missing ';' '*' C:\Program Files (x86)\Microsoft Visual Studio\VC98\INCLUDE\wintrust.h(139) の前: エラー C2501: 'CMSG_SIGNER_INFO': ストレージ クラスまたは型指定子がありません C:\Program Files (x86) \Microsoft Visual Studio\VC98\INCLUDE\wintrust.h(139): エラー C2501: 'psSignerInfo': ストレージ クラスまたは型指定子がありません

ただし、エラー ログには、「ファイルが見つかりません」などは含まれなくなりました。それでもエラーは「ファイルが見つかりません」の症状によく似ていますが、それは単なる推測です。とにかく、Platform SDK の完全なインクルード フォルダーを VC++ インクルード フォルダーにコピーしましたが、役に立ちませんでした。

繰り返しますが、デバッグ ビルドは問題ありません。次に、使用している Debug および Release MinDependency 非 Unicode ビルドのコンパイル オプションとリンク オプションを比較し始め、最終的にそれらを同一にしました。

VC++ を夢中にさせる唯一の原因は、結果のファイルに配置されるデバッグ情報の量だけであることがわかりました。

要するに。/Zl スイッチ (エディット コンティニュのプログラム データベース) を指定してコンパイルすると、動作します。他のすべてが失敗します (プログラム データベースのみを含む)。

以前、Win XP を使用していたときは、このような問題はありませんでした。これを Win7 64 ビット上の古い VC++ 6.0 で動作させることはまだ可能ですか? 新しいものには互換性に関する問題が多すぎるため、古いVC ++がどうしても必要です(VS 2008もあり、すべて問題ありませんが、MinDependencyにリンクしても、結果の.DLLは一部の非常に古いシステムでは機能しません)。

私の推測では、/Zl スイッチが使用されている場合、VC++ は別のコンパイラを使用することさえあります。しかし、それはただの推測であり、とにかく、これを確認する方法と次に何をすべきかはわかりません. 手がかりはありますか?

4

1 に答える 1

0

ふぅ、やっと手に入れた!どういうわけかオプション/ディレクトリの各パスに余分なスペースが追加され、VC++ がいくつかのインクルード ファイルまたは lib ファイルを見つけられなくなりました (これは異なるシステム、XP および Seven で発生しました。おそらく、ディレクトリ パスのコピー/貼り付け中にスペースを追加するのが一般的です)。もの)。興味深いことに、VC++ はこれに一貫性がなく、ビルド モードを変更すると、コンパイラで異なるコード パスがアクティブになる可能性があります。ディレクトリ名のトリミングを行うパスとそうでないパスがあります。

于 2013-09-29T11:20:33.830 に答える