MFC ライブラリへのアプリケーションのリンク
MFC for Windows CE は、MFC のスタティック ライブラリまたはダイナミックリンク ライブラリ (DLL) のいずれかとして使用できます。MFC をスタティック ライブラリとして使用すると、標準の C ライブラリを使用するときに C 関数がリンクされるのと同じように、MFC コードが実行可能ファイルにインクルードされます。MFC を DLL として使用すると、MFC ライブラリは実行時にロードされ、同じ DLL を複数のアプリケーションによって共有できます。
MFC を共有 DLL として使用すると、アプリケーションのサイズがかなり小さくなります。実際には、Windows CE ベースのアプリケーションが MFC にスタティックにリンクされた場合は、MFC DLL を使用してダイナミックにリンクされた場合の 2 ~ 10 倍のコードが必要になります。Windows CE ベースのデスクトップ プラットフォームを開発するとき、MFC を DLL として使用する場合は、アプリケーションを出荷するときに MFC DLL を添付する必要があります。ただし、多くの Windows CE ベースのデバイスでは、MFC DLL が ROM に含まれています。
デスクトップ プラットフォーム用の Microsoft Foundation Class ライブラリでは、単一の DLL にコア クラスと OLE サポート クラスの両方が含まれています。MFC for Windows CE では、ある DLL に OLE サポート クラスが含まれ、別の DLL にコア クラスが含まれます。このようにすると、メモリ リソースを節約できます。たとえば、OLE/ActiveX クラスを使っていない場合は、これらのクラスをメモリにロードする必要はありません。この柔軟性のおかげで、OLE/ActiveX クラスがあってもなくても、OEM による MFC for Windows CE のサポートが可能になります。
MFC for Windows CE では、次の DLL がサポートされます。
- MFC コアにスタティックにリンクしているユーザー DLL
- MFC コアを共有しているユーザー DLL
- MFC コアを共有し、ほかの MFC モジュールからのみ呼び出される拡張 DLL
ActiveX コントロールは、コア MFC および Windows CE ベースのプラットフォームに対応する OLE DLL にダイナミックにリンクする必要があります。Windows CE MFC ライブラリを共有 DLL として使用している場合は、アプリケーションも適切なエクスポート ライブラリ ファイルにリンクしている必要があります。
Windows CE MFC ライブラリを共有 DLL として使用するには、アプリケーションが次の表に示す DLL およびライブラリにリンクされている必要があります。
- Mfcce400(d).dll
- Mfcce400(d).lib
- Mfcs42(d).lib
- Olece400(d).dll
- Olece400(d).lib
メモ (d) は、デバッグ バージョンを表します。
**アプリケーションまたは DLL が正しく設定されていることを確認する最も良い方法は、WCE MFC のいずれかの AppWizard を使用することです。**これらのウィザードは、アプリケーションを適切な MFC ライブラリにリンクするコンパイラおよびリンカの設定を自動的に指定します。また AppWizard は、必要な場合に適切な ActiveX ヘッダー ファイルをアプリケーションに含めます。
MFC アプリケーションまたは DLL を MFC の AppWizard を使用しないで作成している場合は、次の手順を使用してアプリケーションを正しく設定します。
- Windows CE MFC ライブラリを共有 DLL として使用するとき、_AFXDLL をプリプロセッサ定義に定義します。この定義により、アプリケーションが適切な MFC エクスポート ライブラリおよび Mfcs42.lib スタティック ヘルパ ライブラリにリンクされます。アプリケーションが ActiveX をサポートしている場合は、ActiveX も適切な OLE エクスポート ライブラリにリンクされます。
- Windows CE MFC ライブラリをスタティック ライブラリとして使用するときは、_AFXDLL を定義しません。アプリケーションは、スタティック MFC ライブラリである Uafxwce.lib にリンクされます。
- アプリケーションが ActiveX コントロールの場合、Afxctl.h をメイン ヘッダー ファイルにインクルードします。アプリケーションが ActiveX コンテナの場合、Afxdisp.h をメイン ヘッダー ファイルにインクルードし、CWinApp 派生クラスの InitInstance メソッドにある AfxEnableControlContainer 初期化関数を呼び出します。