指定ページのテキストをメモリ(変数)に格納します。
Delphiでの宣言
function XDW_GetPageTextToMemory(handle: p_XDW_DOCUMENT_HANDLE; nPage: Integer; lpszValue: PChar; nDataSize: Integer; reserved: pointer): Integer; stdcall;
handle には XDW_OpenDocumentHandle で得たハンドルを渡します。
nPageはページ番号ですね。
DocuWorksでは1から始まります。
lpszValueは返されるアドレスです。
nDataSizeは返されるアドレス(変数)に割り当ててあるメモリをバイト数で指定します。
reservedにはいつもどおりXDW_NULLです。
ところでnDataSizeには何バイト割り当てればよいのでしょうか?
まずnDataSizeに0、lpszValueにNullを指定すると、返り値で必要なバイト数を返してきます。
これをセットするのですね。
実際に組んでみましょう。
function GetPageTextToMemory(InPage: Integer): String; var Size: Integer; TempChar: pChar; begin //FileHandleにはすでにファイルハンドルが代入されていると仮定 //必要メモリサイズを得る Size := XDW_GetPageTextToMemory(FileHandle, InPage, XDW_NULL, 0, XDW_NULL); GetMem(TempChar, Size); //Get XDW_GetPageTextToMemory(FileHandle, InPage, TempChar, Size, XDW_NULL); Result := String(TempChar); Freemem(TempChar); end;
こうなります。
実際はGetMem~FreeMemをtryで囲んで例外対策をするべきでしょう。