12 October 2008

(VC++) MFCを用いないDLL作成

Visual C++の新規プロジェクト作成で、DLLを作成する選択肢は、直感的に「MFC DLL」しか存在しない。これを選んでDLLを作成すると、通常MFCライブラリへの参照も含まれる。MFCクラスライブラリを使わない場合は、リソースの無駄である。

20081012-dll-newprojectdlg2.png
プロジェクトの新規作成ダイアログ

20081012-dll-depend2.png
生成されたDLLファイルを、Dependency Walker で開いたところ


実は、新規プロジェクトを作成する時に 「Win32プロジェクト」を選択して、プロジェクト作成ダイアログで詳細設定タブを開いて、DLLを指定すればいいだけである。

20081012-dll-newprojectdlg1.png
プロジェクトの新規作成ダイアログでは、Win32プロジェクトを選択する

20081012-dll-depend1.png
生成されたDLLファイルを、Dependency Walker で開いたところ
不必要なMFCへのリンクが存在しない。

なお、この場合、DLL内に含まれるシンボル情報を定義する .def ファイルが自動作成されない。 MFC DLLで作成されるものをコピーしてきて流用するか、自分で作成する必要がある。

DLL filename.def

; defファイル

; 拡張子を除いた、DLLのファイル名を指定
LIBRARY "DLL_filename"

EXPORTS
; DLLで公開する関数名と、一意の序数(重ならなければ適当でよい)を記述
Functionname @0001

このファイルを、プロジェクトのプロパティで、リンカ設定の「モジュール定義ファイル」に指定する。

20081012-dll-adddef.png