|
Cur: 2009-09-25 (Fri) 15:24:46 SHOO  |
| + | TITLE:ダイナミックリンクライブラリを作る |
| + | * 概要 [#v7657bd4] |
| + | Windowsのダイナミックリンクライブラリ(dll)の作成法です。~ |
| + | Linuxの共有ライブラリ(so)とは作り方が異なります。~ |
| + | 基本的には dmd のコンパイラスイッチで -ofXXXX.dll といった感じに、拡張子dllをつけ、DllMainを記述することになります。~ |
| + | また、必要に応じてdefファイルを記述します。 |
| | | |
| + | * DllMain [#ea7a5e0a] |
| + | 例としては以下のような感じになります。 |
| + | この例はTangoを利用する場合のものです。 |
| + | #code(d){{{ |
| + | 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; |
| + | } |
| + | }}} |
| + | |
| + | * defファイル [#la0bd21d] |
| + | #code(def){{{ |
| + | LIBRARY "test.dll" |
| + | EXETYPE NT |
| + | SUBSYSTEM WINDOWS |
| + | CODE SHARED EXECUTE |
| + | DATA WRITE |
| + | EXPORTS |
| + | Initialize |
| + | Finalize |
| + | }}} |
| + | |
| + | * その他注意事項 [#ye827861] |
| + | GCの挙動に気を付けてください。 |
- Backup diff of HowTo/ダイナミックリンクライブラリを作る(No. All)
- Cur: 2009-09-25 (Fri) 15:24:46 SHOO
Counter: 1358,
today: 1,
yesterday: 0