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*****