[[20190318201618]] 『【VBA】DocuworksAPIによる指定したページに含まax(高橋) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『【VBA】DocuworksAPIによる指定したページに含まれるテキスト情報をメモリに取り出すマクロについて』(高橋)

表題のマクロを作成しており、下記の通りコードを作成しております。
しかしながらこのマクロを実行するとイミディエイトウィンドウには

 10 ''テキスト情報取得
と表示されメモリに取り出せておりません。
ハンドルの取得ができていることは確認済みです。
おそらくpValueやtTextの引数の設定がうまくいっていないものと思われますが、原因がわかる方はいらっしゃるでしょうか。
byval pValue as longをbyref pvalue as stringに書き換えたことはありますが、依然として結果は変わらりませんでした。また文字数の確保がうまくいっていないものかと
Dim tText as String * 10 や Dim tText as String * 10000 も試してみましたが結果は変わりませんでした。

お手数をおかけしますがよろしくお願いいたします。

以下コード

'2.80 XDW_GetPageTextToMemoryW 指定したページに含まれるテキスト情報をメモリに取り出す。(ワイドキャラクタ対応版)
Public Declare Function XDW_GetPageTextToMemoryW Lib "xdwapi.dll" ( _

    ByVal handle As Long, _
    ByVal nPage As Long, _
    ByVal pValue As Long, _
    ByVal nBufferLength As Long, _
    Optional ByVal reserved As Long = 0) _
    As Long

Sub GetPageTextToMemory()
' 指定したページに含まれるテキスト情報をメモリ上に取り出す。

Dim msg As Long
Dim ItFile As String
Dim tText As String
Dim pHandle As Long

ItFile = ThisWorkbook.Path & "\" & "1.xdw"

msg = XDW_OpenDocumentHandleExW(StrPtr(ItFile), pHandle)

msg = XDW_GetPageTextToMemoryW(pHandle, 1, StrPtr(tText), Len(tText))
Debug.Print msg; "'" & tText & "'"; "テキスト情報取得"

msg = XDW_CloseDocumentHandle(pHandle)

End Sub

Windowsは64bitOSです。
(そのためLongとLongPtrの差は無視しています。)

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 こんにちは。

 文字列取得時の入れ物をVBA側で用意する必要があることですね。
 しかし、ご提示の

 Dim tText as String * 10

 の文法は正しくありません。(これは「型」宣言と似た動作をします。)
 下記の方法をお勧めします。

 dim tText as string
 tText = String$(10000, vbnullchar)

(Abyss) 2019/03/19(火) 19:25


ありがとうございます。
依然としてメモリ領域が10文字分不足していますというエラーは出続けますが
 tText = String$(10000, vbnullchar)
を加えることで最低限(健全ではないにしろ)メモリへの取得は成功いたしました。
また、当然ですが
for i = 1 to 10000
    tText = tText & VbNullChar
next i
でもできたことを報告しておきます。

初期値では動かないのに、VbNullCharをあらかじめ入れておくと(正常ではないにしろ)動くっていうのも不思議ですね。

回答ありがとうございます。
(高橋) 2019/03/19(火) 23:56


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.