ISimilarity
COM公式ドキュメント
類似度ファイル内にファイルごとの類似度データとファイルIDを格納および取得するためのメソッドを定義します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
類似度特性テーブルと類似度ファイルIDテーブルを作成またはオープンします。
| path | LPWSTR | in | テーブルを格納するファイルの名前を指定する、null終端文字列へのポインター。類似度特性テーブルと類似度ファイルIDテーブルは、このファイルの2つの代替ファイルストリームに作成されます。詳細については、ISimilarityFileIdTable::CreateTable および ISimilarityTraitsTable::CreateTable メソッドの path パラメーターを参照してください。 |
| truncate | BOOL | in | 新しい類似度特性テーブルと新しい類似度ファイルIDテーブルを常に作成または切り詰める必要がある場合は TRUE。FALSE を指定し、これらのテーブルが存在して有効な場合は、それらが使用されることがあります。それ以外の場合、いずれかのテーブルが有効でないか存在しないときは、既存のテーブルはすべて上書きされます。 |
| securityDescriptor | BYTE* | in | ファイルをオープンするときに使用するセキュリティ記述子へのポインター。このパラメーターが NULL の場合、ファイルには既定のセキュリティ記述子が割り当てられます。ファイルの既定のセキュリティ記述子内のアクセス制御リスト(ACL)は、ファイルの親ディレクトリから継承されます。詳細については、CreateFile 関数の lpSecurityAttributes パラメーターを参照してください。 |
| recordSize | DWORD | in | 類似度ファイルIDテーブルに格納する各ファイルIDのサイズ(バイト単位)。すべての類似度ファイルIDは同じサイズでなければなりません。有効な範囲は SimilarityFileIdMinSize から SimilarityFileIdMaxSize までです。既存のテーブルをオープンする場合、このパラメーターの値は既存の類似度ファイルIDテーブルのファイルIDサイズと一致している必要があります。一致しない場合、既存のテーブルは有効でないと見なされ、上書きされます。 |
| isNew | RdcCreatedTables* | out | テーブルの状態を表す RdcCreatedTables 列挙値を受け取る変数へのポインター。新しいテーブルが作成された場合、この変数は RDCTABLE_New を受け取ります。既存のテーブルが使用された場合、この変数は RDCTABLE_Existing を受け取ります。このメソッドが失敗した場合、この変数は RDCTABLE_InvalidOrUnknown を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
一方のテーブルは正常に作成またはオープンできても、もう一方が作成またはオープンできない場合、両方のテーブルが有効でないとマークされ、isNew パラメーターが指す変数は RDCTABLE_InvalidOrUnknown を受け取ります。
RDCアプリケーションによる ISimilarityTraitsMapping インターフェイスと IRdcFileWriter インターフェイスの実装を使用して、類似度特性テーブルと類似度ファイルIDテーブルを作成またはオープンします。
| mapping | ISimilarityTraitsMapping* | in | 類似度特性テーブルをファイルに書き込むように初期化された ISimilarityTraitsMapping インターフェイスポインター。 |
| fileIdFile | IRdcFileWriter* | in | ファイルIDテーブルをファイルに書き込むように初期化された IRdcFileWriter インターフェイスポインター。 |
| truncate | BOOL | in | 新しい類似度特性テーブルと新しい類似度ファイルIDテーブルを常に作成または切り詰める必要がある場合は TRUE。FALSE を指定し、これらのテーブルが存在して有効な場合は、それらが使用されることがあります。それ以外の場合、いずれかのテーブルが有効でないか存在しないときは、既存のテーブルはすべて上書きされます。 |
| recordSize | DWORD | in | 類似度ファイルIDテーブルに格納する各ファイルIDのサイズ(バイト単位)。すべての類似度ファイルIDは同じサイズでなければなりません。有効な範囲は SimilarityFileIdMinSize から SimilarityFileIdMaxSize までです。既存のテーブルをオープンする場合、このパラメーターの値は既存の類似度ファイルIDテーブルのファイルIDサイズと一致している必要があります。一致しない場合、既存のテーブルは有効でないと見なされ、上書きされます。 |
| isNew | RdcCreatedTables* | out | テーブルの状態を表す RdcCreatedTables 列挙値を受け取る変数へのポインター。新しいテーブルが作成された場合、この変数は RDCTABLE_New を受け取ります。既存のテーブルが使用された場合、この変数は RDCTABLE_Existing を受け取ります。このメソッドが失敗した場合、この変数は RDCTABLE_InvalidOrUnknown を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
一方のテーブルは正常に作成またはオープンできても、もう一方が作成またはオープンできない場合、両方のテーブルが有効でないとマークされ、isNew パラメーターが指す変数は RDCTABLE_InvalidOrUnknown を受け取ります。
類似度ファイル内のテーブルを閉じます。
| isValid | BOOL | in | 類似度特性テーブルと類似度ファイルIDテーブルを閉じるときに削除する必要がある場合は FALSE。それ以外の場合は TRUE。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
isValid パラメーターに FALSE を指定した場合、削除されるのはテーブルのみで、類似度ファイル自体は削除されません。類似度ファイルの削除は呼び出し元の責任です。
CloseTable メソッドが戻るとき、このメソッドがエラーコードを返した場合でも、テーブルは必ず閉じられます。
類似度ファイル内のテーブルにファイルIDと類似度データ情報を追加します。
| similarityFileId | SimilarityFileId* | in | 類似度ファイルIDテーブルに追加する SimilarityFileId 構造体へのポインター。 |
| similarityData | SimilarityData* | in | 類似度特性テーブルに追加する SimilarityData 構造体へのポインター。 |
戻り値
成功した場合は S_OK を、失敗した場合はエラーを表す HRESULT を返します。
このメソッドは次のエラーコードを返すこともあります。
解説(Remarks)
このメソッドが失敗した場合、類似度ファイルIDテーブルと類似度特性テーブルは破損しているとマークされ、アプリケーションによって再構築する必要があります。アプリケーションは破損したテーブルを閉じ、新しいテーブルを作成しなければなりません。
指定したファイルに類似するファイルの一覧を返します。
| similarityData | SimilarityData* | in | ファイルの類似度情報を含む SimilarityData 構造体へのポインター。 |
| numberOfMatchesRequired | WORD | in | TBD |
| resultsSize | DWORD | in | findSimilarResults パラメーターが指す IFindSimilarResults オブジェクトに格納できるファイルIDの数。 |
| findSimilarResults | IFindSimilarResults** | out | 返される IFindSimilarResults インターフェイスポインターを受け取る場所へのポインター。呼び出し元は、このインターフェイスが不要になったら解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
findSimilarResults パラメーターで返されるファイルIDには、既に削除されたファイルのIDが含まれる場合があります。
既存の類似度特性テーブルと既存の類似度ファイルIDテーブルのコピーを作成し、内部ポインターを入れ替えて、既存のテーブルを削除します。
| newSimilarityTables | ISimilarity* | in | テーブルの一時的なコピーの作成に使用される、一時的な ISimilarity オブジェクトへの省略可能なポインター。CopyAndSwap メソッドを呼び出す前に、呼び出し元は CreateTable メソッドを呼び出して一時テーブルを作成する必要があります。戻った後、呼び出し元は CloseTable メソッドを呼び出して一時テーブルを閉じる必要があります。 |
| reportProgress | ISimilarityReportProgress* | in | コピーと入れ替え操作の進行状況に関する情報を受け取り、アプリケーションがコピー操作を停止できるようにする、ISimilarityReportProgress オブジェクトへの省略可能なポインター。呼び出し元は、このインターフェイスが不要になったら解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
類似度ファイル内の類似度ファイルIDテーブルに格納されているレコード数を取得します。
| recordCount | DWORD* | out | レコード数を受け取る変数へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISimilarity "{96236A83-9DBC-11DA-9E3F-0011114AE311}" #usecom global ISimilarity IID_ISimilarity "{}" #comfunc global ISimilarity_CreateTable 3 wstr,int,var,int,var #comfunc global ISimilarity_CreateTableIndirect 4 sptr,sptr,int,int,var #comfunc global ISimilarity_CloseTable 5 int #comfunc global ISimilarity_Append 6 var,var #comfunc global ISimilarity_FindSimilarFileId 7 var,int,int,sptr #comfunc global ISimilarity_CopyAndSwap 8 sptr,sptr #comfunc global ISimilarity_GetRecordCount 9 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISimilarity "{96236A83-9DBC-11DA-9E3F-0011114AE311}" #usecom global ISimilarity IID_ISimilarity "{}" #comfunc global ISimilarity_CreateTable 3 wstr,int,sptr,int,sptr #comfunc global ISimilarity_CreateTableIndirect 4 sptr,sptr,int,int,sptr #comfunc global ISimilarity_CloseTable 5 int #comfunc global ISimilarity_Append 6 sptr,sptr #comfunc global ISimilarity_FindSimilarFileId 7 sptr,int,int,sptr #comfunc global ISimilarity_CopyAndSwap 8 sptr,sptr #comfunc global ISimilarity_GetRecordCount 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。