goo blog サービス終了のお知らせ 

コード関係のストック

仕事や趣味で作ったコードを溜めておく場所

blogタイトルどおりのを久しぶりに

2005-11-22 | Weblog
ここ2週間?くらい、久しぶりにDocuWorks APIをいじっていて、2年前に書いたコードを探し出すのに苦労したので、残しておく。(ここ数回の日記の流れで来た方、予想に反していてごめんなさい。)
DWの開発チームのメンバとの議論は刺激的で面白いが、自分の知識の曖昧さに改めて気づかされる。こんなに(悪い意味ではなく)手間がかかるならば、部長にも「コメント出すのを頼まれています」と正式に伝えておくべきだった。。。SEDSには後で入力してやろう。今日まででトータル20Hは使っているかな。
長そうなので、フォントを小さくしてみよう。

Option Explicit


Type XDW_DOCUMENT_HANDLE
dummy As Long
End Type


Type XDW_OPEN_MODE
nSize As Long
nOption As Long
End Type


Type XDW_OPEN_MODE_EX
nSize As Long
nOption As Long
nAuthMode As Long
End Type


Type XDW_DOCUMENT_INFO
nSize As Long
nPages As Long
nVersion As Long
nOriginalData As Long
nDocType As Long
nPermission As Long
nShowAnnotations As Long
nDocuments As Long
nBinderColor As Long
nBinderSize As Long
End Type


Type XDW_ANNOTATION_HANDLE
dummy As Long
End Type


Type XDW_AA_INITIAL_DATA
nSize As Long
nAnnotationType As Long
nReserved1 As Long
nReserved2 As Long
End Type

Public Const XDW_OPEN_READONLY As Integer = 0
Public Const XDW_OPEN_UPDATE As Integer = 1
Public Const XDW_AUTH_NODIALOGUE As Integer = 1

Public Const XDW_E_NOT_INSTALLED As Long = &H80040001
Public Const XDW_E_INFO_NOT_FOUND As Long = &H80040002
Public Const XDW_E_INSUFFICIENT_BUFFER As Long = &H8007007A
Public Const XDW_E_FILE_NOT_FOUND As Long = &H80070002
Public Const XDW_E_FILE_EXISTS As Long = &H80070050
Public Const XDW_E_ACCESSDENIED As Long = &H80070005
Public Const XDW_E_BAD_FORMAT As Long = &H8007000B
Public Const XDW_E_OUTOFMEMORY As Long = &H8007000E
Public Const XDW_E_WRITE_FAULT As Long = &H8007001D
Public Const XDW_E_SHARING_VIOLATION As Long = &H80070020
Public Const XDW_E_DISK_FULL As Long = &H80070027
Public Const XDW_E_INVALIDARG As Long = &H80070057
Public Const XDW_E_INVALID_NAME As Long = &H8007007B
Public Const XDW_E_INVALID_ACCESS As Long = &H80040003
Public Const XDW_E_INVALID_OPERATION As Long = &H80040004
Public Const XDW_E_NEWFORMAT As Long = &H800E0004
Public Const XDW_E_BAD_NETPATH As Long = &H800E0005
Public Const XDW_E_APPLICATION_FAILED As Long = &H80001156
Public Const XDW_E_UNEXPECTED As Long = &H8000FFFF
Public Const XDW_E_CANCELED As Long = &H80040005

Enum XDW_AID
XDW_AID_FUSEN = 32794
XDW_AID_TEXT = 32785
XDW_AID_STAMP = 32819
XDW_AID_STRAIGHTLINE = 32828
XDW_AID_RECTANGLE = 32829
XDW_AID_ARC = 32830
XDW_AID_POLYGON = 32834
XDW_AID_MARKER = 32795
XDW_AID_LINK = 49199
XDW_AID_PAGEFORM = 32814
XDW_AID_OLE = 32783
XDW_AID_BITMAP = 32831
End Enum

Enum XDW_AnnotationType
XDW_ATYPE_INT = 0
XDW_ATYPE_STRING = 1
XDW_ATYPE_DATE = 2
XDW_ATYPE_BOOL = 3
XDW_ATYPE_OTHER = 999
End Enum

Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Declare Function MyBeep Lib "kernel32.dll" _
Alias "Beep" _
(ByVal dwFreq As Long, _
ByVal dwDuration As Long) As Long

Declare Function XDW_OpenDocumentHandle Lib "xdwapi.dll" _
(ByVal lpszFilePath As String, _
pHandle As Long, _
pMode As XDW_OPEN_MODE) As Long
' ByRef pHandle As XDW_DOCUMENT_HANDLE, _
' ByRef pMode As XDW_OPEN_MODE) As Long

'int XDW_OpenDocumentHandle(
' const char* lpszFilePath, XDW_DOCUMENT_HANDLE* pHandle, XDW_OPEN_MODE* pMode);
'パラメータ
' lpszFilePathDocuWorksファイルを指定するファイルパス。絶対パスで指定する。パスの文
' 字列の長さは255バイトまでとする。
' pHandle返されるハンドルへのポインタ。
' pModeアクセスモードへのポインタ。

'[DllImport("")]
Declare Function XDW_GetDocumentInformation Lib "xdwapi.dll" ( _
ByVal handle As Long, _
pDocumentInfo As XDW_DOCUMENT_INFO) As Long
' (ByVal handle As XDW_DOCUMENT_HANDLE, _
' ByRef pDocumentInfo As XDW_DOCUMENT_INFO) As Long'/*
'int XDW_GetDocumentInformation(
' XDW_DOCUMENT_HANDLE handle, XDW_DOCUMENT_INFO* pDocumentInfo);
'パラメータ
' handleDocuWorksファイルのハンドル。
' pDocumentInfo返される情報へのポインタ。
'*/
'

Declare Function XDW_AddAnnotation Lib "xdwapi.dll" ( _
ByVal handle As Long, _
ByVal nAnnotationType As Long, _
ByVal nPage As Long, _
ByVal nHorPos As Long, _
ByVal nVerPos As Long, _
ByVal pInitialData As Long, _
phNewAnnotation As Long, _
ByVal reserved As Long) As Long
' private extern static int XDW_AddAnnotation(
' XDW_DOCUMENT_HANDLE handle, XDW_AID nAnnotationType, int nPage, int nHorPos, int nVerPos,
' /*ref XDW_AA_INITIAL_DATA*/int pInitialData, ref XDW_ANNOTATION_HANDLE phNewAnnotation,int reserved);
'/*
'int XDW_AddAnnotation(
' XDW_DOCUMENT_HANDLE handle, int nAnnotationType, int nPage, int nHorPos, int nVerPos,
' XDW_AA_INITIAL_DATA* pInitialData, XDW_ANNOTATION_HANDLE* phNewAnnotation,
' void* reserved);
'パラメータ
' handleDocuWorksファイルのハンドル。
' nAnnotationTypeアノテーションの種類。次の値のいずれかが有効。
' XDW_AID_TEXTテキスト
' XDW_AID_FUSEN付箋
' XDW_AID_STRAIGHTLINE直線
' XDW_AID_RECTANGLE矩形
' XDW_AID_ARC楕円
' XDW_AID_LINKリンク
' XDW_AID_BITMAPビットマップ
' XDW_AID_STAMP日付印
' nPageアノテーションを貼るページを指定する。1から始まる。
' nHorPosアノテーションのx座標。単位は1/100mm。
' nVerPosアノテーションのy座標。単位は1/100mm。
' pInitialData初期値情報。説明参照。
' phNewAnnotation貼り付けられたアノテーションへのハンドルが返される。
' reserved予約引数。NULLでなければならない。
' */
'[DllImport("xdwapi.dll")]
'private extern static int XDW_SetAnnotationAttribute(
' XDW_DOCUMENT_HANDLE handle, XDW_ANNOTATION_HANDLE hAnnotation,
' string lpszAttributeName, XDW_AnnotationType nAttributeType, string pAttributeValue, int nReserved,
' int pReserved);
'/*

Declare Function XDW_SetAnnotationAttribute Lib "xdwapi.dll" ( _
ByVal handle As Long, _
ByVal hAnnotation As Long, _
ByVal lpszAttributeName As String, _
ByVal nAttributeType As Long, _
ByVal pAttributeValue As String, _
ByVal nReserved As Long, _
ByVal pReserved As Long) As Long
' private extern static int XDW_SetAnnotationAttribute(
' XDW_DOCUMENT_HANDLE handle, XDW_ANNOTATION_HANDLE hAnnotation, string lpszAttributeName,
' XDW_AnnotationType nAttributeType, string pAttributeValue, int nReserved, int pReserved);

'int XDW_SetAnnotationAttribute(
' XDW_DOCUMENT_HANDLE handle, XDW_ANNOTATION_HANDLE hAnnotation,
' const char* lpszAttributeName, int nAttributeType, char* pAttributeValue, int nReserved,
' void* pReserved);
'パラメータ
' handleDocuWorksファイルのハンドル。
' hAnnotationアノテーションのハンドル。
' lpszAttributeName属性名を指定する。
' nAttributeType属性値の型情報。次の値のいずれかが有効。
' XDW_ATYPE_INT整数値型
' XDW_ATYPE_STRING文字列型
' pAttributeValue設定する属性値へのポインタ。
' nReserved予約引数。0でなければならない。
' pReserved予約引数。NULLでなければならない。
'*/
Declare Function XDW_SaveDocument Lib "xdwapi.dll" ( _
ByVal handle As Long, _
ByVal reserved As Long) As Long
' [DllImport("xdwapi.dll")]
' private extern static int XDW_SaveDocument(
' XDW_DOCUMENT_HANDLE handle, int reserved);
'[DllImport("xdwapi.dll")]
'private extern static int XDW_SaveDocument(XDW_DOCUMENT_HANDLE handle, int reserved);
'/*
'int XDW_SaveDocument(XDW_DOCUMENT_HANDLE handle, void* reserved);
'パラメータ
' handleDocuWorksファイルのハンドル。
' reserved予約引数。NULLでなければならない。
'*/
'[DllImport("")]
Declare Function XDW_CloseDocumentHandle Lib "xdwapi.dll" ( _
ByVal handle As Long, _
ByVal reserved As Long) As Long

'XDW_DOCUMENT_HANDLE handle, int reserved);
'/*
'int XDW_CloseDocumentHandle(XDW_DOCUMENT_HANDLE handle, void* reserved);
'パラメータ
' handle解放するハンドル。
' reserved予約引数。NULLでなければならない。
'*/






長くてごめんなさい。以上。

最新の画像もっと見る

4 コメント

コメント日が  古い順  |   新しい順
XDWAPI属性と値について (ペロ)
2006-07-24 18:13:48
XDWAPIについて情報を集めていたところ辿り着きました。

富士ゼロックスから提供されている「DocuWorksTM Development Tool Kit 6.0 DocuWorks API(XDWAPI)仕様書」には、VisualBasicの資料やサンプルが少なく苦労しています。

そんな中、貴重なサンプルを掲示していただき、とても参考になりました。

ありがとうございました。



ところで、APIリファレンスにも記述のなかった属性の定義(リテラル値)をどのように知り得たのでしょうか?

参考までに教えて頂けると幸いです。

返信する
XDWAPI (迷い行者)
2009-06-22 15:35:45
XDWAPIを使って、ちょっと困っていた時、ここに来ていました。
このスペースを借りて、XDWAPIについてのことを落書きして、ごめんなさい。
アノテーションの貼り付けなんですけど、バインダー(XDWファイルM個、数十ページを含む)
にたいして、ページ毎に複数個アノテーションの貼り付けを指定ます。この処理数回から数十回
をしますと、プログラムがダウンしてしまう。
今日は5ファイル、33ページが含まれるバインダーにページ毎に5~12個アノテーションを
貼り付けることをしてみると、40回くらいすると、XDWAPIプログラムがXDW_SaveDocument()でダウンしてしまう。
皆さんもこういう経験がありますか?
プログラム例:

for(i=0; i<pages; i++){
for(j=0; j=annotions; j++){
/* アノテーションを貼り付け */
・・・・・・

case XDW_AID_TEXT:
XDW_OpenDocumentHandle(outname, &XDW_handle, &mode);
XDW_SetAnnotationAttribute(・・・・・・);
XDW_SaveDocument(XDW_handle, NULL);
XDW_CloseDocumentHandle(XDW_handle, NULL);

・・・・・・
}
}
返信する
XDWAPI (迷い行者)
2009-06-22 15:37:21
プログラム例:

for(i=0; i<pages; i++){
for(j=0; j=annotions; j++){
/* アノテーションを貼り付け */
・・・・・・

case XDW_AID_TEXT:
XDW_OpenDocumentHandle(outname, &XDW_handle, &mode);
XDW_SetAnnotationAttribute(・・・・・・);
XDW_SaveDocument(XDW_handle, NULL);
XDW_CloseDocumentHandle(XDW_handle, NULL);

・・・・・・
}
}
返信する
コメントありがとうございました。 (blog owner)
2009-06-23 14:23:19
迷い行者様

コメントをありがとうございます。

> 今日は5ファイル、33ページが含まれるバインダーにページ毎に5~12個アノテーションを
> 貼り付けることをしてみると、40回くらいすると、XDWAPIプログラムがXDW_SaveDocument()でダウンしてしまう。
> 皆さんもこういう経験がありますか?
とのことですが、「あるか・ないか」と言われましたら、残念ながらありません。
と申しますか、そのような処理をしたことがないもので、何とも申し上げられないのです…。

そのような中でコメント申し上げられるとしたら、もう検討済みとは思われますが、C++を利用してのプログラミング(であろうと思いますが)ありがちなポインタのゴミがだんだんたまってきてハングアップということは考えられないでしょうか。
XDWAPIは、残念かなレガシーですので、まだまだポインタをがんがん使っています。私はC#へのラッパークラスを自分で作っていますが、いずれにしてもポインタからは逃げようがありません。(C#のガベージコレクションの有り難みが半減です。)

また、これも考えにくいですが、DocuWorks Deskのユーザフォルダにある文書ファイルを操作している場合、文書が選択状態で、プレビューの画面に文書内容が表示されていると、ファイルハンドルが取られてしまってAPIからの操作ができなくなることがあります。

この程度の情報しか持ち合わせておりませんが、お役に立てますでしょうか。

今後ともよろしくお願いいたします。

追伸:
ご存じかもしれませんが
http://www.freeml.com/docuworks-users
にて、色々なレベルでの議論がなされています。(ほとんどが使用方法ですが。)
是非、情報の横展開をしていただきたいので、よろしければご参加下さい。
返信する

コメントを投稿