このトピックではRALの情報について説明します。
エクスポート
全て標準の呼び出し規約である__stdcall(通常のWindows APIと同じ呼び出し規約)を使用しています。識別子の装飾はありません。識別子の一覧についてはVCユーザの方であればdumpbinユーティリティを使用して確認することが出来ます。エクスポートを調べるにはコマンドラインで以下のように指定します。
dumpbin -exports RAL.DLL
上記のコマンドラインでRALからエクスポートされている識別子が表示されます。必要に応じて出力をテキストファイルにリダイレクト出来ます。リダイレクト記号を使用して直接テキストファイルを指定するか、または以下のコマンドラインを指定することも可能です。
dumpbin -exports -out:EXPORTS.TXT RAL.DLL
尚、変数のエクスポートはありません。
構造体
現在のところRALで使用する構造体は以下の1つだけです。
struct tagRalAssociateStruct { HWND hWndOwner, // オーナウィンドウのハンドル hWndDialog, // ダイアログのハンドル hWndNotify; // メッセージ通知先のハンドル DLGPROC pfnPreprocess, // 前処理コールバック関数ポインタ pfnPostprocess; // 後処理コールバック関数ポインタ char *pszDialogCaption, // ダイアログキャプション *pszProgramBrowseCaption, // プログラム参照時のキャプション *pszIconBrowseCaption; // アイコン参照時のキャプション char *pszExtension; // 拡張子バッファ DWORD cbExtension; // 拡張子バッファサイズ char *pszKey; // キー名バッファ DWORD cbKey; // キー名バッファサイズ char *pszClass; // クラスバッファ DWORD cbClass; // クラスバッファサイズ char *pszVerb; // 動詞バッファ DWORD cbVerb; // 動詞バッファサイズ char *pszMenuItem; // メニュー項目バッファ DWORD cbMenuItem; // メニュー項目バッファサイズ char *pszCommandLine; // コマンドラインバッファ DWORD cbCommandLine; // コマンドラインバッファサイズ char *pszIconPath; // アイコンパスバッファ DWORD cbIconPath; // アイコンパスバッファサイズ int iIndex; // インデクス DWORD dwOption; // オプション };
typedef struct tagRalAssociateStruct RALASSOCIATESTRUCT;
struct tagRalAssociateStructはキーワードRALASSOCIATESTRUCTで型定義されています。
リソース
RALが内蔵しているリソースはバージョンリソースとダイアログリソースの2種類があります。リソースはRAL.RCに記述されています。
バージョンリソース
FILEVERSION 0,4,3,4 PRODUCTVERSION 0,4,3,4 FILEFLAGSMASK 0x3FL(VS_FF_DEBUG | VS_FF_INFOINFERRED | VS_FF_PATCHED | VS_FF_PRERELEASE | VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD) FILEFLAGS 0x2L(VS_FF_PRERELEASE) FILEOS 0x4L(VOS_WINDOWS32) FILETYPE 0x2L(VFT_DLL) FILESUBTYPE 0x0L(VFT2_UNKNOWN)
文字列ファイル情報("StringFileInfo")
"Comments" "Registry Access Library 0.04\0" "CompanyName" "Thrasher\0" "FileDescription" "RAL\0" "FileVersion" "0.0004.3.0004\0" "InternalName" "RAL\0" "LegalCopyright" "RAL 0.04 Copyright (C) 1997 Thrasher\0" "OriginalFilename" "RAL.DLL\0" "ProductName" "RAL\0" "ProductVersion" "0.0004.3.0004\0"
ファイルバージョンの数値(FILEVERSION値)はRalGetVersionで取得できます。ファイルバージョンリソースは左の数値から順にメジャーバージョン、マイナーバージョン、フェーズナンバー、ビルドナンバーを表します。
プロダクトバージョン(PRODUCTVERSION)、ファイルフラグマスク(FILEFLAGMASK)、ファイルフラグ(FILEFLAGS)、ファイルOS(FILEOS)、ファイルタイプ(FILETYPE)、ファイルサブタイプ(FILESUBTYPE)の各数値については、現在のところRALは取得機能を提供していません。
文字列ファイル情報("StringFileInfo")には文字列による各種の記述があります。これらは全てRalGetVersionStringで取得できます。
ダイアログリソース
IDD_ASSOCIATEBYEDIT 100 詳細表示型関連付けダイアログ IDD_ASSOCIATEBYLIST 101 構造表示型関連付けダイアログ
詳細表示型 構造表示型 IDOK 1 「閉じる(C)」ボタンコントロール 「閉じる(C)」ボタンコントロール IDC_EXTENSIONSTATIC 1000 「拡張子(E):」スタティックコントロール 「拡張子(X):」スタティックコントロール IDC_EXTENSIONCOMBOBOX 1001 拡張子コンボボックス IDC_KEYSTATIC 1002 「アプリ情報キー(K):」スタティックコントロール IDC_KEYEDIT 1003 アプリ情報キーエディットコントロール IDC_CLASSSTATIC 1004 「ファイルの説明(D):」スタティックコントロール 「ファイルの説明:」スタティックコントロール IDC_CLASSEDIT 1005 ファイルの説明エディットコントロール IDC_VERBSTATIC 1006 「アクション(V):」スタティックコントロール IDC_VERBCOMBOBOX 1007 アクションコンボボックス IDC_DELETE 1008 「削除(O)」ボタンコントロール IDC_MENUITEMSTATIC 1009 「メニュー項目(M):」スタティックコントロール IDC_MENUITEMEDIT 1010 メニュー項目エディットコントロール IDC_COMMANDLINESTATIC 1011 「コマンドライン(L):」スタティックコントロール 「コマンドライン:」スタティックコントロール IDC_COMMANDLINEEDIT 1012 コマンドラインエディットコントロール IDC_COMMANDLINEBUTTON 1013 コマンドライン「参照(B)」ボタンコントロール IDC_ICONSTATIC 1014 「アイコン(I):」スタティックコントロール IDC_ICONEDIT 1015 アイコンエディットコントロール IDC_ICONBUTTON 1016 アイコン「参照(R)」ボタンコントロール IDC_ICONLISTBOX 1017 アイコンリストボックスコントロール IDC_REGISTER 1018 「登録(A)」ボタンコントロール IDC_UNREGISTER 1019 「解除(U)」ボタンコントロール IDC_ASSOCIATIONSTATIC 1020 「関連付け構造(T):」ボタンコントロール IDC_ASSOCIATIONTREE 1021 関連付け構造ツリービューコントロール IDC_EXTENSIONEDIT 1022 拡張子エディットコントロール IDC_ADDEXTENSIONBUTTON 1023 「拡張子追加(E)」ボタンコントロール IDC_SCANEXTENSIONBUTTON 1024 「拡張子検索(S)」ボタンコントロール IDC_ADDITEMBUTTON 1025 「アプリ追加(A)」ボタンコントロール IDC_CLASS 1026 ファイルの説明スタティックコントロール IDC_COMMANDLINE 1027 コマンドラインスタティックコントロール IDC_ICONPATHSTATIC 1028 「アイコン:」スタティックコントロール IDC_ICONPATH 1029 アイコンスタティックコントロール IDC_ICONASSOCIATED 1030 アイコン表示スタティックコントロール IDC_DETAILBUTTON 1031 「詳細(D)」ボタンコントロール
現在のところRALが内蔵しているダイアログリソースには関連付け用のモノとして2つあります。関連付けダイアログはRalAssociateDlgで表示できます。またRALが内蔵するダイアログリソースは全てRalApplyで表示できます。
スレッド
RalExecuteではオプションの指定によってスレッドを起動しています。RalExecuteは起動したスレッドとの同期に手動リセットイベントオブジェクトを使用しています。イベントは無名で作成されているため、外部からこの同期を制御することは出来ません。
RALの各APIは複数のスレッドから呼び出すことが可能ですが、それぞれのAPIでは必要に応じて適宜スレッドを停止しています。RALの各APIはスレッドの調停にクリティカルセクションを使用しています。従って複数のスレッドが走行している場合でも1度にRALのAPIを実行できるスレッドは1つに限定されます。
RALでは他プロセスの元で動作しているRALとも同期を行っています。他プロセスのRALとの同期にはミューテックスを使用しています。RALは各API内で必要に応じ最初にミューテックスの所有権の要求を試み、所有権を取得できた場合に実行を継続します。所有権が取得できない間は予め設定されているタイムアウト時間(デフォルトでは3秒)を限度にスレッドを停止し、タイムアウトした場合にはエラーリターンします。他プロセスのRALとの同期はRalSynchronizeで制御できます。また同期時のタイムアウト時間はRalSetWaitPeriodで設定できます。
他プロセスのRALとの同期に使用しているミューテックスは名前付きのモノを使用しています。RALでは以下の名称でミューテックスを使用しています。
MutexAccessedByRAL
このミューテックスを予め所有しておくことで、RALの各APIが行っている他プロセスのRALとの同期において待機状態を確実にスキップさせることが可能です。しかし、その場合には他プロセスのRALでは必ず待機状態に陥ることになります。
メモリ
RAL内部でメモリを使用する際には殆どの場合ヒープを使用しています。必要に応じて適宜ヒープの作成、破棄を行っています。RALのAPIが内部で作成したヒープは、そのAPIがリターンする際には必ず破棄されており、APIの呼び出しをまたがって使用することはありません。
RALが使用しているデータのセクションは全てコンパイラのデフォルト名及びデフォルト属性を持っています。独自の名前のデータセクションは使用していません。また共有属性のデータセクションも使用していません。