指定ページのテキストをメモリ(変数)に格納します。
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で囲んで例外対策をするべきでしょう。



「読む・書く・話す」を一瞬でモノにする技術


コメントする