2017-01-20 4 views
0

私の目標は、基本的なWin32 DLL以外の依存関係を持たないMFC/C++ DLLを作成することです。 >General - - だから私は、プロジェクトのプロパティで"Use MFC in a Static Library"設定を選んだ>Use of MFCVS 2008でDLLを作成するときに、「スタティックライブラリでMFCを使用する」設定が適用されないのはなぜですか?

enter image description here

を私は、このDLLを構築し、Dependency Walkerで結果を確認するとき、私はこの取得:

enter image description here

次のMFC DLLに依存関係を表示:

MFC90U.DLL 
MSVCR90.DLL 
MSVCP90.DLL 

ここで私は何が間違っていますか?

PS。私はVisual Studio 2008を使用しています

+0

インクリメンタルリンクは有効になっていますか?すべての助けを再建しますか? –

+0

'MSVCR90.DLL'と' MSVCP90.DLL'はMFCバイナリではありません。 – IInspectable

+0

@IInspectable:まあ、正直言って、私はそれについて考えたことはありません。ただし、 "MFCを共有DLLとして使用する"プロジェクトをビルドする場合、これらのファイルが含まれます。また、Windows XPのインストール(Vistaの場合もあります)にはデフォルトで含まれていないため、MSI(および "DLL-Hell")経由で配布する必要があります。 – c00000fd

答えて

0

私はそれを持っていると思います。私を混乱させたのは、C++ - >Code Generation - >Runtime Libraryのプロジェクト設定でした。それはMulti-threaded DLL (/MD)に変更した後、次はstdafx.hファイルに追加されました:だから、それは静的にMFCライブラリにリンクさせるために

#define _AFXDLL 

、私はMulti-threaded (/MT)に最初の設定を変更する2つ目をコメントアウトしなければなりませんでした。

+0

あなたの状況に[DLL境界を越えてCRTオブジェクトを渡す可能性のあるエラー](https://msdn.microsoft.com/en-us/library/ms235460.aspx)がどのように適用されるのか理解していただきたいと思います。 CRTに静的にリンクすることで、DLL境界を越えてCRTオブジェクト(メモリなど)を安全に渡すことはできません。 – IInspectable

+0

@IInspectable:希望しましょう。 – c00000fd

+0

私は、DLLの境界を越えて渡すためにCRTオブジェクトから離れていました。私はプリミティブ型、メモリバッファポインタ、または 'ヒープ'割り当てメモリを使用しています。全体として、私のコードのほとんどはWin32 APIを使用しています。 CRTはモジュール内の最後の手段としてのみ提供されます。そして、あなたのもう一つの点として、MFC dllにリンクすることは、最悪のことです。そこに行って、それをしてください。もういや!あなたは、文字通り、ユーザがSystem32フォルダ内に持っている "どんな状態の" DLLにも依存しています。最高のDllの地獄! – c00000fd

関連する問題