Last Updated 2011/05/11
Programming Tips Visual C++ DLL  索 引 
DEFファイルの意味
2004/10/07

DEF ファイルの意味

---------------------------------------------------------------------
LIBRARY CUSER

CODE PRELOAD MOVEABLE DISCARDBLE
CODE PRELOAD SINGLE

EXPORTS
CInterface

SECTIONS
.bss  SHARED READ WRITE
.data SHARED READ WRITE
---------------------------------------------------------------------

以下の2行の意味
CODE PRELOAD MOVEABLE DISCARDBLE
CODE PRELOAD SINGLE

CODE:        コードセグメントのデフォルト属性を指定
PRELOAD:     DLL のロード時にコードやデータが同時にロードされる
MOVEABLE:    セグメント移動可能(16bit だけで有効)
DISCARDABLE: 必要がなくなったセグメント破棄可能(16bit だけで有効)
SINGLE:      データセグメントが一つ生成されすべてのプロセスで共用される.
             (DLL を作成するときのデフォルト)



以下の2行の意味
.bss SHARED READ WRITE
.data SHARED READ WRITE

デフォルトの定義済みデータセグメント (初期化付き/なし)
DLL 間ですべてのグローバルなスタティク変数を共有したいときは,この指定をする.

+- Process [A] -+  +- Process [B] -+
|    AAA.EXE    |  |    BBB.EXE    |
|    This.dll   |  |    This.dll   |
+---------------+  +---------------+

This.dll という DLL を利用するプログラムを 2 つ起動したとする.
通常 Process [A] の This.dll と Process [B] の This.dll は別々のデータ領域を持つ.
This.dll のデータセグメントを共有に指定しておくと,例えばグローバル変数に
    int a=1;
なんてのが書いてあるとこれが共有される.
そして Process [A] の This.dll で a=10; とした後で、Process [B] の This.dll で a を参照すると 10 になる.
なお,Process [A] の This.dll の a と、Process [B] のそれとが、同じ番地のメモリに格納されるとは限りませんので、
    int* pa = &a;
などということは出来ない.


参照
DEFファイル
前後のTips
DEFファイルの意味

DSS ProgrammingTipsCGI Ver2.02