SWT
SWTはなぜDLLが要らない(ように見える)のか
大昔のSWTはjarファイルとDLLファイル(Windowsの場合)とに分離しており、これをアプリケーションで使うにはアプリ自体にはjarを付属させ、dllファイルは「パス」に置くしかなかった(起動時にjava.library.pathを指定してもよいが)。しかし、現在のswtはswt.jarのみをアプリに付属させれば良いようになっている。
しかし当然のことながら、相変わらずDLLは必要なのであり、しかもこれはOS側がロードするものなので、それぞれのDLLはそれぞれ一つのファイルとなっていなければならない。一体どうやっているのか?
jarの中にすべてのdllが含まれている
例えば、win32-win32-x86用のswt.jarを展開してみると、以下のようなファイルが現れる。
2011/09/05 10:43 <DIR> . 2011/09/05 10:43 <DIR> .. 2011/06/13 20:51 187 external.xpt 2011/09/05 10:43 <DIR> META-INF 2011/09/05 10:43 <DIR> org 2011/05/26 19:13 53,248 swt-awt-win32-3735.dll 2011/05/26 19:13 118,784 swt-gdip-win32-3735.dll 2011/05/26 19:13 77,824 swt-webkit-win32-3735.dll 2011/05/26 19:13 61,440 swt-wgl-win32-3735.dll 2011/05/26 19:13 430,080 swt-win32-3735.dll 2011/05/26 19:13 77,824 swt-xulrunner-win32-3735.dll 2011/06/13 20:51 13 version.txt 8 個のファイル 819,400 バイト
このように、実はswt.jarのトップに必要なdllが格納された状態になっている。 これをどうやって実行時に「Windowsにロードさせる」だろうか?