2

アプリでmsvcrt.dllに対してコンパイルされたいくつかのDLLを使用する必要があります。私はすでにそれを試しました、そしてすべてがうまくいくようです。私の最初の心配は、msvcrt.dllへの余分な依存関係があることです。私はすでにVisualStudio10ランタイムライブラリを含めており、これ以上追加する必要がないことを望んでいました。msvcrt.dllが常にウィンドウシステムフォルダにあることは知っていますが、これに依存する必要がありますか?

ライブラリに関するページは次のとおりです。

http://www.zlatkovic.com/libxml.en.html

ソースをダウンロードして最初からコンパイルすることもできますが、長期的にはそうなる可能性がありますが、今のところ、これらのライブラリへのリンクやDLLの使用に問題がないことを確認したいと思いました。

そのページには次のようなものがあります。

「これらのバイナリを使用してコンパイルするすべてのプログラムは、同じランタイムを使用する必要があります。アプリがクラッシュするのが気に入らない場合は、msvcrt.dllを使用するようにプロジェクトを設定してください。何らかの理由で別のランタイムを使用する必要がある場合は、ソースを取得してコンパイルする必要があります。 libxmlと友達自身。」

それが私を心配していることです。今のところすべてうまくいくように見えるかもしれませんが、セットアップが異なる他のシステムで実際に使用されたときにどうなるか心配です。

4

2 に答える 2

3

msvcrt.dllが常にウィンドウシステムフォルダにあることは知っていますが、これに依存する必要がありますか?

はい。msvcrt.dllWindowsが所有および保守しています。あなたはそれが存在することを信頼することができ、あなたはそれを自分で配布する必要はありません(そしてそうすべきではありません)。

異なるランタイムバージョンに対してリンクされたdllを持っていても、DLLの境界を越えてCRTによって定義されたタイプを渡さない限り、std::vector問題はありません(たとえば、異なる実装を持つ可能性があるため、リンクされたdllからそのようなオブジェクトを渡すmsvcrt.dllにリンクされたdllへのmsvcr100.dllは、問題を引き起こす可能性があります。あるdllにメモリを割り当てず、別のdllで解放する限り、(ここでも、実装が異なる可能性がmallocありfree、おそらく異なるヒープ)

ただし、他のdllがリンクされているCRTバージョンについて知る必要がある「不合理」なことをするように依頼しない限り、それらは問題なく共存できます。(そして、事実上すべてのプログラムがmsvcrt.dllに依存することになります。他に何もない場合、それらはさまざまなWindows DLLにリンクし、次にmsvcrt.dllにリンクするためです。したがって、そのシナリオが安全でない場合は、その場合、Windows用に作成された実質的にすべてのプログラムは安全ではありません)

于 2013-03-09T14:02:24.767 に答える
0

通常、作成または使用するDLLでは、msvcrtの番号付きバージョン(たとえば、msvcrt90.dll)またはそのデバッグバージョン(msvcrt90d.dll)に依存します。または、おそらくmsvcrt100.dll/msvcrt100d.dllです。これらのDLLには、Cランタイムライブラリと呼ばれるものの実装が含まれています。おそらくあなたはこのmsvcrt.dllと私が上で名前を付けたものを混同していますか?それらは2つの異なるものです。

私が聞いたところによると、msvcrt.dllは、オペレーティングシステム用のMicrosoft独自の内部バージョンです。心配したり、考えたり、頭をつぶしたり、額を小刻みに動かしたり、そのDLLで眠りを失ったりする必要はまったくありません。

Cランタイムライブラリの「混合」で注意する必要がある唯一のことの1つは、あるバージョンのCRTからメモリを割り当てず、別のバージョンのCRTを使用してメモリを解放することです。最終的には、1つのヒープから割り当てて、別のヒープを解放する必要があります。それは悪いことであり、CRTは文句を言って例外をスローします。

特定のバージョンのCRTに依存してアプリをデプロイする場合は、CRTをインストールするインストーラーをデプロイすることもできます。実際、Microsoftはそれらのために無料ダウンロードを提供しています。たとえば、アプリの起動時に超古いバージョンのCRT(たとえばWindowsに付属していないバージョン)に依存してアプリをコンパイルした場合、発生するのはWindowsが起動を拒否することだけです。アプリ。それはあなたに不可解なメッセージを与えるでしょう、あなたが理解するためにグーグルしなければならないでしょう。

于 2013-03-09T14:09:27.800 に答える