1

このページでは、VC++ 2008 ライブラリのローカル コピーをアプリと共にデプロイして、サードパーティの vcredist をインストールする必要をなくす方法について説明します。これは、嫌いなインストーラーを使用せずに実行できる zip フォルダーをユーザーに送信できるため、私にとって便利です。

しかし、それは私にはうまくいきません。私のアプリは MFC を使用せず、Win32 のみを使用し、それ以外は標準の C++ です。私は持ってapp/MyApp.exeいます、それだけです...どのファイルからコピーする必要が%PROGDIR%\Microsoft Visual Studio 9.0\VC\Redist\x86あり、正確にはどこにコピーする必要がありますか?

XP モードの仮想 PC でこれをテストしています。このページの指示に従おうとすると、ファイルをコピーしても「アプリケーションの初期化に失敗しました」というエラーが表示されます。私が見逃しているステップはありますか?

マニフェストを確認したところ、CRT のみが使用されていることが予想されるようです: http://pastebin.com/BD4NZMC2

4

1 に答える 1

0

DLL-hellを回避する最も簡単な方法は、(デフォルトの/ MDではなく)/MTコンパイラフラグを使用してアプリケーションを再コンパイルすることです。これにより、Cランタイムライブラリが静的にリンクされます。これがスタンドアロンexeの場合、これは常に機能します。

そうでない場合(つまり、独自のDLLがある場合)、同じモジュールでメモリを割り当てて解放するように注意する必要があります。つまり、実行可能ファイルでメモリの一部をmalloc()し、DLLで同じポインタをfree()する場合です。 、クラッシュします-実行可能ファイルとDLLの両方が独自のヒープを取得し、不一致のヒープでfree()を試行しても機能しません。

于 2011-05-18T09:46:59.843 に答える