Last Updated 2011/05/11
Programming Tips Visual C++ DLL  索 引 
VC4以降での32bit DLLの作り方
2002/03/08

■ヘッダーファイル

windows.h をインクルードする.
#include 

インターフェイスとしたい関数に
    __declspec(dllexport) と WINAPI
という呪文をつける.

int を返す例を書くと...
  #include    
  __declspec(dllexport) BOOL WINAPI TestFunc( char* szData, int iMode);
となる.
(VC のヘルプを見ると __declspec(dllexport) をマクロ定義している)

■ソースファイル

32bit DLL の呪文である DllMain を唱える.DllMain は無くても正常に動くので,DLL 独自の初期処理と終了処理が不要なら組み込む必要はない.

<< test.c >>
#include "test.h"

BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
{
    return(TRUE);
}

__declspec(dllexport) BOOL WINAPI TestFunc( char* szData, int iMode)
{
}

ソースが出来たら,新規に DLL プロジェクト(MFC タイプではありません)を作成して,必要なファイルを登録する.後はコンパイルだけ.(.DEF は不要)

コンパイルすると .DLL と .LIB が出来る.
DLL を利用する側では先程作ったヘッダーファイルを include して、プロジェクトに .LIB を追加する.




上記の方法だと DLL 内の関数名が インポートライブラリ(.lib)経由で DLL を呼ばない VB 等からはストレートで呼べない名前(_Test@4)になってしまう.

これを回避するためには .def を作る必要がある.

■ヘッダーファイル

windows.h をインクルードする.
#include 

インターフェイスとしたい関数に
    WINAPI
という呪文をつける.

BOOL を返す例を書くと...
  #include    
  BOOL WINAPI TestFunc( char* szData, int iMode );
となる.

■ソースファイル

32bit DLL の呪文である DllMain を唱える.DllMain は無くても正常に動くので,DLL 独自の初期処理と終了処理が不要なら組み込む必要はない.

<< test.c >>
#include "test.h"

BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
{
    return(TRUE);
}

BOOL WINAPI TestFunc( char* szData, int iMode)
{
}

■DEF ファイル
.def を作成し,インターフェイスにする関数を宣言する.

<< test.def >>
LIBRARY      "TEST" ; 出力 DLL 名
EXPORTS
    Test            ; インターフェイス関数名

ソースが出来たら,新規に DLL プロジェクト(MFC タイプではありません)を作成して,必要なファイル(.c .h .def)を登録する.後はコンパイルだけ.



参照
VC1.Xでの16bit DLLの作り方
VBから呼び出すDLLの作成
DEFファイル
dllexport dllimport
前後のTips
VC4以降での32bit DLLの作り方

DSS ProgrammingTipsCGI Ver2.02