XDW_GetPageTextToMemory

指定ページのテキストをメモリ(変数)に格納します。

 

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で囲んで例外対策をするべきでしょう。