Last Updated 2011/05/11
Programming Tips Visual C++ DLL  索 引 
VC1.Xでの16bit DLLの作り方
2002/03/07

■ヘッダーファイル

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

インターフェイスとしたい関数に
    FAR PASCAL __export
という呪文をつける.
(DLL は C インターフェイスである.C++ で書く場合は extern "C" を付ける)

int を返す例を書くと...
  #include    
  extern "C" int FAR PASCAL __export Test( char FAR* szData, int iMode);
となる.
(DLL は far なのでポインタは far にする)

■ソースファイル

DLL の呪文である LibMain と _WEP を唱える.
これに続いて本来の処理を書く(蛇足だが MFC を使うなら LibMain は不要)

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

extern "C" int FAR PASCAL LibMain( HANDLE hModule, WORD wDataSeg,
                            WORD cbHeapSize, LPSTR lpszCmdLine)
{
    return(1);
}

extern "C" int FAR PASCAL __export _WEP ( int bSystemExit )
{
    return(1);
}

extern "C" int FAR PASCAL __export Test( char FAR* szData,
                                             int iMode)
{
}

ポインターが far として渡されるという事に注意する.

ソースが出来たら,VWB のプロジェクト新規作成をして DLL 宣言をして必要なファイルを登録する.後はコンパイルだけ.(.DEF は VWB が生成するのをそのまま使用する)

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

DLL で使うスタックは,DLL を呼ぶ側のスタックが使われるのと,DLL で取得するグローバルヒープのオーナーも DLL を呼ぶ側になることは頭に入れておく.
(DLLは far のコードセグメントと考える)


参照
VC4以降での32bit DLLの作り方
DEFファイル
前後のTips
VC1.Xでの16bit DLLの作り方

DSS ProgrammingTipsCGI Ver2.02