[[20190314235228]] 『【VBA】DocuworksAPIによるアプリケーションファメx(高橋) ページの最後に飛ぶ

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

 

『【VBA】DocuworksAPIによるアプリケーションファイルを DocuWorks 文書に変換するマクロについて』(高橋)

DocuworksAPIを使ってアプリケーションファイルをDocuworks文書に変換するマクロを作成しております。
しかしながら(DocuworksAPIの関数の)エラーコードを吐いてしまい、変換が行えません。
パスの指定でエラーを吐いている当たり、第一引数の渡し方が悪いのだとは思うのですが・・・。
ワイドキャラクタ対応版、値渡し、strptr("引数"),hex("引数"),strconv("引数",vbfromunicode)なども試してみましたがうまくいきませんでした。
dllを同一ディレクトリにはおいてあります。また、APIに頼らない(通常の変換動作)では変換できております。

また、よく使われる手法としてプリンターを設定しておいて印刷から作成する方法もありますが、今後変換したものをさらにあれこれという処理を書き加える予定なのでできればこちらの主砲で変換したいと思っております。

どうぞ間違っている点をご教授いただけますと幸いです。

作成しているコードは以下の通りです。


Option Explicit

'XDW_BEGIN_CREATE_OPTION の宣言
Public Type XDW_BEGIN_CREATE_OPTION

     nSize As Long
     bNoUseSpecifiedApp As Boolean
End Type

'2.6 XDW_BeginCreationFromAppFile アプリケーションファイルを DocuWorks 文書に変換する。
Public Declare Function XDW_BeginCreationFromAppFile Lib "xdwapi.dll" (ByRef lpszOmputPath As String, ByRef lpszOutputPath As String, ByVal bWithOrg As Boolean, ByRef pHandle As Long, ByRef pCreateOption As XDW_BEGIN_CREATE_OPTION) As Long

'2.7 XDW_BeginCreationFromAppFileW アプリケーションファイルを DocuWorks 文書に変換する。(ワイドキャラクタ対応版)
Public Declare Function XDW_BeginCreationFromAppFileW Lib "xdwapi.dll" (ByRef lpszOmputPath As String, ByRef lpszOutputPath As String, ByVal bWithOrg As Boolean, ByRef pHandle As Long, ByRef pCreateOption As XDW_BEGIN_CREATE_OPTION) As Long

'2.24 XDW_EndCreationFromAppFile アプリケーションファイルを DocuWorks 文書に変換終了する。
Public Declare Function XDW_EndCreationFromAppFile Lib "xdwapi.dll" (ByRef Handle As Long, ByRef reserved As Variant) As Long

Sub Sample04()

'変数の宣言
Dim msg As String
Dim pHandle As Long
Dim pCreateOption As XDW_BEGIN_CREATE_OPTION
Dim ItFile As String, OtFile As String

'ユーザー定義型の設定
With pCreateOption

    .nSize = Len(pCreateOption)
    .bNoUseSpecifiedApp = True
End With

'対象ファイルパスの宣言
ItFile = "C:\Users\(ユーザー名、半角英数)\Desktop\Docuworks\test.txt"
'''ItFile = Application.GetOpenFilename("アプリケーションファイル,*.*")
OtFile = Left(ItFile, Len(ItFile) - 3) & "xdw"

'変換開始
msg = XDW_BeginCreationFromAppFile(ItFile, OtFile, False, pHandle, pCreateOption)
Debug.Print ErrorCode(Hex(msg)), Hex(msg), Dir(ItFile), "変換開始"
「XDW_E_INVALID_NAME 8007007B test.txt 変換開始」と出力されます。

'変換終了
msg = XDW_EndCreationFromAppFile(pHandle, Null)
Debug.Print ErrorCode(Hex(msg)), Hex(msg), Dir(OtFile), "変換終了"
「XDW_E_INVALIDARG 80070057 変換終了」と出力されます。

End Sub

Function ErrorCode(ByVal ErrorNumber As String)
'エラーコードの変換(一部省略しています。)

Select Case ErrorNumber

    Case "80040002"
        '入力に指定したパスのファイルが見つからない。
        ErrorCode = "XDW_E_FILE_NOT_FOUND"
    Case "80070057"
        '関数の引数に仕様外の値を渡した。
        ErrorCode = "XDW_E_INVALIDARG"
    Case "8007007B"
        'パス名の指定が正しくない。
        ErrorCode = "XDW_E_INVALID_NAME"
End Select

End Function


環境
Windows10 64bit
Excel2016(Vb6.0?)

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


 unicode対応APIケースの例です。

 Declare PtrSafe Function XDW_BeginCreationFromAppFileW Lib "xdwapi" _
     (ByVal lpszInputPath As LongPtr, _
      ByVal lpszOutputPath As LongPtr, _
      ByVal bWithOriginal As Long, _
      ByRef handle As LongPtr, _
      Optional ByVal pCreateOption As LongPtr) As Long
 Declare PtrSafe Function XDW_EndCreationFromAppFile Lib "xdwapi" _
     (ByVal handle As LongPtr, _
      Optional ByVal reserved As LongPtr) As Long

 Public Sub ConvertTest()
     Dim hr As Long, pHandle As LongPtr

     hr = XDW_BeginCreationFromAppFileW( _
                     StrPtr("変換元ファイル絶対パス"), _
                     StrPtr("ターゲットファイル絶対パス"), _
                     0, pHandle)
     Debug.Print Hex$(hr)

     If hr = 0 Then hr = XDW_EndCreationFromAppFile(pHandle)

 End Sub

( Abyss) 2019/03/15(金) 14:59


LongPtr型への理解が足らず、とりあえず動く・・・という状態ですが問題は解決しました。
LongPtrをもう少し調べてまいります。

回答ありがとうございます。
(高橋) 2019/03/15(金) 20:48


コメント返信:

[ 一覧(最新更新順) ]


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