/**************************/
/*  プラグイン作成メモ    */
/*  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
のらだいこ