« ■TMS Advanced ToolBars & Menusアップデート | トップページ | ☆Docuworksプラグイン「自動正立」を作る。 »

☆「char**」 を Delphiで書くと・・・。

☆Docuworksプラグインを作成してみる。で、Delphi向けに書き直したPLUGGEDIN_STRUCT 構造体(レコード型)ですが、ファイルリストの取得がうまくいかないのでチェックしてみました。
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;

|

« ■TMS Advanced ToolBars & Menusアップデート | トップページ | ☆Docuworksプラグイン「自動正立」を作る。 »