[Vmaid-devel] dllloaderの削除とw32loaderの追加

Back to archive index

Kazuki IWAMOTO iwm****@maid*****
2005年 12月 19日 (月) 00:23:55 JST


岩本一樹です。

CVSを更新しました。dllloaderを削除して新たにw32loaderを追加しました。
w32loadreはdllloaderに代わるWindowsのDLLを実行するためのプログラムです。
dllloaderとは異なりw32loadreはVideo maidのために新たに書かれたプログラムです。
w32loaderの仕様は下記とおりです。

1)多重ロード
あるモジュールAはモジュールBがエクスポートする関数を利用する場合、
モジュールAをロードするときにモジュールBもロードできます。
またこのときにモジュールBもモジュールAがエクスポートする関数を利用する
(互いの関数をインポートしている)場合であっても、AとBを正しくロードできます。

2)APIをUNIX系OSネイティブのプログラムから利用可能
実装されている関数はすべてプログラムから利用可能です。
UNIX系OSネイティブのプログラムからLoadLibraryを呼び出してDLLをロードし、
GetProcAddressを呼び出して関数を取得できます。

3)ロケール/言語/コードページ
環境変数からロケール/言語/コードページを決定します。マルチバイト系APIでは
UTF-8ではなく、コードページによる処理が行われます。

4)レジストリ
ホームディレクトリの.w32ldr/system.iniまたはそれが存在しないときには
etcディレクトリのw32ldr/system.iniのregistryグループにWindowsのレジストリを
再現しました。データのタイプとしてtext,dword,binary,noneをサポートしています。
レジストリに書き込んだ場合には、ホームディレクトリに.w32ldr/system.iniが
作られます。

例
[registry]
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Drivers32\VIDC.HFYU=text,huffyuv.dll

5)初期化ファイル
初期化ファイルはディレクトリの指定は無視されます。
ホームディレクトリの.w32ldr以下またはそれが存在しないときにはetcディレクトリの
w32ldr以下から読み込まれます。初期化ファイルへの書き込みはホームディレクトリの
.w32ldr以下になります。

6)特殊ディレクトリ
ホームディレクトリの.w32ldr/system.iniまたはそれが存在しないときには
etcディレクトリのw32ldr/system.iniのdirectoryグループで特殊ディレクトリを
指定します。キーはwindows、system、temp、dataです。モジュールをロードする
ときにはsystemを参照します。

例
[directory]
system=/usr/lib/win32

2)に関してはavicore/icm.cを見れば一目瞭然です。Windowsでのコンパイルと
UNIX系OSでのコンパイルで全く同じソースコードを用います。さらにこれを発展させて
WindowsのAPIレベルのプログラムをUNIX系OSでコンパイルできるようにする構想も
あります。

またUNIX系OSのライブラリをLoadLibararyでロードできるようにする構想もあります。
上記の構想と組み合わせれば、WindowsのDLLのソースコードをw32loaderを使って
コンパイルして、できあがったUNIX系OSネイティブなバイナリをLoadLibararyで
ロードすることが可能になります。


岩本一樹
iwm****@maid*****



Vmaid-devel メーリングリストの案内
Back to archive index