ページへ戻る

− Links

 印刷 

HowTo​/ダイナミックリンクライブラリを作る :: D言語友の会

wiki:HowTo/ダイナミックリンクライブラリを作る

ページ内コンテンツ
  • 概要
  • DllMain
  • defファイル
  • その他注意事項

概要 anchor.png[1] Edit [2]

Windowsのダイナミックリンクライブラリ(dll)の作成法です。
Linuxの共有ライブラリ(so)とは作り方が異なります。
基本的には dmd のコンパイラスイッチで -ofXXXX.dll といった感じに、拡張子dllをつけ、DllMainを記述することになります。
また、必要に応じてdefファイルを記述します。

Page Top

DllMain anchor.png[3] Edit [4]

例としては以下のような感じになります。 この例はTangoを利用する場合のものです。

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 
 
 
 
 
 
 
 
-
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
|
!
extern (C) bool rt_init( void delegate( Exception ) dg = null );
extern (C) bool rt_term( void delegate( Exception ) dg = null ); 
 
import win32.windows;
pragma(lib, "win32");
pragma(lib, "tango-user-dmd");
 
extern (Windows)
BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved)
{
    switch (ulReason)
    {
    case DLL_PROCESS_ATTACH:
        rt_init();
        break;
        
    case DLL_PROCESS_DETACH:
        tango.stdc.stdio._fcloseallp = null;
        rt_term();
        break;
        
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
        return false;
    default: assert(0);
    }
    return true;
}
Page Top

defファイル anchor.png[5] Edit [6]

1
2
3
4
5
6
7
8
LIBRARY "test.dll"
EXETYPE NT
SUBSYSTEM WINDOWS
CODE SHARED EXECUTE
DATA WRITE
EXPORTS
	Initialize
	Finalize
Page Top

その他注意事項 anchor.png[7] Edit [8]

GCの挙動に気を付けてください。


Last-modified: 2009-09-25 (金) 15:24:46 (JST) (3365d) by SHOO