/**************************/ /* プラグイン作成メモ */ /* 07/07/22 */ /**************************/ 主にDelphiでカスタムのプラグインを作成するための参考にしてください。 C/C++言語の使用者の為にも一応C表現のプロトタイプも一部載せてみました。 でも間違ってる箇所があるかもしれませんが、目下勉強中ですのでご容赦下さい。 [プロジェクトの作成] fdbtPlugin.pas fdbtPluginUtils.pas TagEditorLibAddinConsts.pas TagEditorLibConsts.pas の四つをプロジェクトに加えて、fdbtPluginにあるクラスTFdbtPluginを継承してプラグインを作成してください。 ここではTFdbtPluginMainクラスを作成したとします。 ライブラリの初期化文に、 begin Plugin:=TFdbtPluginMain.Create; end. と記述します。これでライブラリが読み込まれた際にプラグインラッパーが作成されます。 [エクスポート関数] {* GetLibInfo 関数 *} ライブラリ情報を返します。与えられたBufferに文字列情報を割り当ててください。 function GetLibInfo(InfoNo: Integer; Buffer: PChar; Size: Integer): Integer; int WINAPI GetLibInfo(int InfoNo, char* Buffer, int Size); InfoNo: FDBT_VERSION = 0 // ライブラリのバージョン FDBT_DESCRIPTION = 1 // ライブラリの説明。ファイル形式の名称など。 FDBT_EXTENSIONS = 2 // 対応拡張子。複数ある場合は","カンマで区切ります。 FDBT_AUTHOR = 3 // 作成者の名前 Buffer: 返すべき文字列。 Size: Bufferに割り当てられたメモリのサイズ。 戻り値: 成功の場合はFDBT_SUCCESS=0、失敗はそれ以外。 {* GetTagFieldInfo 関数 *} プラグインが対応するタグのフィールド情報を返します。 function GetTagFieldInfo(fl: PTagFieldList; size: integer): integer; int WINAPI GetTagFieldInfo(PTagFieldList fl, int size); fl: TTagFieldの配列型のポインタ。タグフィールドの情報を割り当てます。 typedef struct{ char Name[255]; // フィールドの識別子 char DisplayName[255]; // エディタのカラムに表示する名前 int ValueType; // 値の種類 bool Editable; // 編集可能かどうか bool Visible; // エディタに表示するかどうか void* Data; // その他のデータ(リストの場合は項目データ) } TTagField, *PTagField; typedef TTagField *PTagFieldList; // タグフィールドの配列ポインタ ValueTypeにリストフィールド、FDBT_VALUE_TYPE_LISTやFDBT_VALUE_TYPE_LISTEDITを指定した場合、Dataにリストに表示する項目を指定しなければならない。 Dataには*char型の配列を指定する(**char または PTagListData)。 主に共通であると思われる標準タグフィールドは以下の通り。これらは「全般」タブで表示されるものです。 曲長はCDDBを利用して曲名を取得する際に使用します。 フィールド定義名 識別子 値の種類 説明 FDBT_FIELD_TITLE 'title' FDBT_VALUE_TYPE_STRING 曲名 FDBT_FIELD_ARTIST 'artist' FDBT_VALUE_TYPE_STRING アーティスト名 FDBT_FIELD_ALBUM 'album' FDBT_VALUE_TYPE_STRING アルバム名 FDBT_FIELD_TRACK 'track' FDBT_VALUE_TYPE_STRING トラック番号 FDBT_FIELD_YEAR 'year' FDBT_VALUE_TYPE_STRING リリース年(西暦) FDBT_FIELD_GENRE 'genre' FDBT_VALUE_TYPE_LIST ジャンル FDBT_FIELD_COMMENT 'comment' FDBT_VALUE_TYPE_STRING コメント FDBT_FIELD_DURATION 'duration' FDBT_VALUE_TYPE_DOUBLE 曲長 FDBT_FIELD_LENGTH 'length' FDBT_VALUE_TYPE_STRING 演奏時間 FDBT_FIELD_BITRATE 'bitrate' FDBT_VALUE_TYPE_STRING ビットレート size: 渡された配列の長さ。 戻り値: 割り当てたフィールド情報の数。 {* GetTagInfo 関数 *} タグ情報を読み出します。Tagに読み出したデータを入れてください。 function GetTagInfo(FileName: PWideChar; Tag: PTagInfo; Size: integer): integer; int WINAPI GetTagInfo(wchar_t* FileName, PTagInfo Tag, int Size); FileName: ワイド(Unicode)文字列型ポインタ。読み出すべきファイル名。 Tag: TTagValueの配列型のポインタ。読み出したデータをここに割り当てる。 typedef struct{ char Field[255]; // タグのフィールド(値の識別子) char Value[255]; // タグの値 } TTagValue, *PTagValue; typedef TTagValue *PTagInfo; // タグ値の配列ポインタ Valueには、フィールドの値の種類によって割り当てる値の型が異なる。 FDBT_VALUE_TYPE_INTEGER, FDBT_VALUE_TYPE_LIST: integer(int) FDBT_VALUE_TYPE_DOUBLE: double FDBT_VALUE_TYPE_STRING, FDBT_VALUE_TYPE_LISTEDIT, FDBT_VALUE_TYPE_REFER, FDBT_VALUE_TYPE_TEXT: ヌルで終わるchar文字列 これはSetTagInfo関数で与えられたTagの値を参照する時も同じ。 また、これらフィールド情報の定義はGetTagFieldInfo関数によって行う。 Size: Tagの配列の長さ。 戻り値: 成功の場合は読み出したフィールドの数。失敗は0。 {* SetTagInfo 関数 *} タグ情報をファイルに保存します。 function SetTagInfo(FileName: PWideChar; Tag: PTagInfo): integer; int WINAPI SetTagInfo(wchar_t* FileName, TTagInfo* Tag); FileName: ワイド(Unicode)文字列型ポインタ。保存先ファイル名。 Tag: タグデータ。型の説明はGetTagInfo関数を参照。 戻り値: 成功はFDBT_SUCCESS=0、失敗はそれ以外。 [問い合わせなど] 何か分からないことがあれば、お気軽にご連絡下さい。 nora@odoruinu.net のらだいこ