これ何て呼びますか

いつもお世話になります

DocuWorksの出力ファイルを操作する際、Declare Functionを使うのですが
環境依存文字を使ったファイルのハンドルを取るときなどに、ファイル名がFunctionの中で
化けているようでうまく行きません

(宣言例)
'2.64 XDW_OpenDocumentHandle DocuWorksファイルにアクセスするためのハンドルを得る。この場合だけ、pHandleはByRefで定義
Public Declare PtrSafe Function XDW_OpenDocumentHandle Lib "xdwapi.dll" (ByVal lpszFilePath As String, ByRef pHandle As LongPtr, ByRef pMode As XDW_OPEN_MODE) As LongPtr
Public Type XDW_OPEN_MODE
nSize As Long
nOption As Long
End Type

'2.6 XDW_CloseDocumentHandle DocuWorksファイルにアクセスするためのハンドルを解放する。
Public Declare PtrSafe Function XDW_CloseDocumentHandle Lib "xdwapi.dll" (ByVal handle As LongPtr, ByVal reserved As String) As LongPtr

(使用例)
'...DocuWorksファイルにアクセスするためのハンドルを得る。
XDW_OpenDocumentHandle FileInfo(1), lngHandle, myMode

'...FileInfo(1)のファイル、最終ページにFileInfo(2)以降の図面を挿入する。
XDW_InsertDocument lngHandle, myInfo.nPages + 1, FileInfo(k), vbNullString

ファイル名は変数、FileInfo(k)になります
今は、環境依存文字を見つけて一度、変換して処理して終了後に元戻す方法を考えています

これは、あきらめてファイル名を変更するしかないですか?
何か参考になることが有りましたら教えてください

以上、宜しくお願い申し上げます

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (2件)

>今は、環境依存文字を見つけて一度、変換して処理して終了後に...


同じ手間を掛けるなら、もう少しスマート?な方法として、一時的に OS のリンクファイルを作成したファイルを食わせれば上手く行くかもです。

バッチかPowerShellの前処理にて。
タイムスタンプなんかの一時ファイル名で...
参考:
https://ascii.jp/elem/000/004/146/4146389/#eid35 …
    • good
    • 0

こんにちは



回答になっていませんけれど・・・

Functionの機能自体はDLL依存なので、DLL側にそのようなオプションが用意されていない限り正面からでは無理そうですね。
内部でどのように解釈されているかがわかれば、lpszFilePathをそのように変換して渡せばうまく行くかも知れません。
(Fujifilmに問い合わせれば回答を得られるかも知れません)

一方で、DocuWorks本体もUnicodeの扱いは上手くないようです。
https://opencds-fb.fujifilm.com/gen/docuworks_au …
----- 引用 --------
[CSV形式で結果保存]を選択してCSV出力するときに、検索結果のファイルパス中のUnicode文字は「?」で出力されます。

IMEで環境依存文字(Unicode)を入力すると、「?」に変換されることがあります。その場合は、ほかのアプリケーションから文字列をコピーして貼り付けるか、リスト表示に切り替えて名前を入力してください。
--- ここまで ---
とあります。


問い合わせで解決しなければ、あまりこだわらずに、ご提示の方法が宜しそうに思います。

>環境依存文字を見つけて一度、変換して処理して終了後に
>元戻す方法を考えています
多分、パス全体が問題なのでしょうから、安全な固定ディレクトリを作業フォルダとして、そこに必要なファイルを一旦全部コピーし、まとめてファイル名を変更してから処理するのが簡単ではないでしょうか?

上記なら、環境依存文字のチェックをしなくてもすむと思います。
ファイル数が大量だったり、容量が大きいと多少時間がかかる可能性はありますが・・
    • good
    • 0
この回答へのお礼

早々と本当にありがとうございます

多分、無理だろうと思いましたが念のため聞いてみました
本当にいつもご丁寧なご回答ありがとうございます
感謝しています

自分は78歳、長年コンピュータ会社で働いていましたが
70歳で設計会社に転職しました
まだまだやりたいこといっぱいです
これからもよろしくお願いいたします

お礼日時:2025/02/22 17:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!