- 概要
- DllMain
- defファイル
- その他注意事項
Windowsのダイナミックリンクライブラリ(dll)の作成法です。
Linuxの共有ライブラリ(so)とは作り方が異なります。
基本的には dmd のコンパイラスイッチで -ofXXXX.dll といった感じに、拡張子dllをつけ、DllMainを記述することになります。
また、必要に応じてdefファイルを記述します。
例としては以下のような感じになります。
この例はTangoを利用する場合のものです。
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;
}
|
1
2
3
4
5
6
7
8
| LIBRARY "test.dll"
EXETYPE NT
SUBSYSTEM WINDOWS
CODE SHARED EXECUTE
DATA WRITE
EXPORTS
Initialize
Finalize
|