☆「char**」 を Delphiで書くと・・・。
☆Docuworksプラグインを作成してみる。で、Delphi向けに書き直したPLUGGEDIN_STRUCT
構造体(レコード型)ですが、ファイルリストの取得がうまくいかないのでチェックしてみました。
ヘッダーファイルの構造体をよく見てみると・・・ん?・・・ 「char**」 ・・・ おおっ、なんと*(アスタリスク)が2つも並んでいるではないですか。
Cがよくわかっていない私には難解でしたが、昨日、今日といろいろと試した結果、 次のコードでうまく取得できました。でも合ってるのかな??
ファイル名の取得部分です。ちょっとややこしいですね。
type PLUGGEDIN_STRUCT = ^TPluggedin_struct; TPluggedin_struct = packed record (略) ps_pszFiles: PChar; ←ここが問題! (略) end;
ヘッダーファイルの構造体をよく見てみると・・・ん?・・・ 「char**」 ・・・ おおっ、なんと*(アスタリスク)が2つも並んでいるではないですか。
struct _pluggedin_struct { (略) const char** ps_pszFiles; (略) };
Cがよくわかっていない私には難解でしたが、昨日、今日といろいろと試した結果、 次のコードでうまく取得できました。でも合ってるのかな??
type Tps_pszFiles = ^_Tps_pszFiles; _Tps_pszFiles = array[0..32767] of PChar; PLUGGEDIN_STRUCT = ^TPluggedin_struct; TPluggedin_struct = packed record ps_nPlugVersion: LongInt; ps_pszFunction: PChar; ps_execParallel: LongInt; ps_nFiles: LongInt; ps_pszFiles: Tps_pszFiles; ps_pnPageNumbers: LongInt; ps_pszExecFolder: PChar; ps_hwndDWDesk: LongInt; end;
ファイル名の取得部分です。ちょっとややこしいですね。
function PLG_ExecuteCommand(pPlgStruct: PLUGGEDIN_STRUCT): LongInt; stdcall; (略) // 選択されたファイル名を順番に取得します。 for I := 0 to pPlgStruct^.ps_nFiles-1 do begin InputFile := pPlgStruct^.ps_pszFiles^[I]; (略) end;
| 固定リンク