Notes C API に OSLoadString という関数があります。この関数は Notes C API 上戻されたエラーコードを元に割り当てられたメッセージを出力することができる関数です。LotusScript クラスだけを使用している場合には特に必要ありませんが、LotusScript で Notes C API 関数を直接 Call するようになると重要になってきます。ということで LotusScript で OSLoadString を Call する仕組みを作ってみました。今回は SxNotesError というクラスにしています。
Dim sxErr As New SxNotesError(errorNumber&)
というような形でクラスオブジェクトを初期化して、GetErrMessage メソッドでエラーメッセージを取得してください。例えば errString$ = sxErr.GetErrMessage というような感じです。
LotusScript のボタンを作って (Declarations) に上のソースを全て入力し、Click イベントに以下のようなコードを入れるとエラーコードを入力してメッセージをチェックするシミュレーションができます。また別のテクニックとして lss ファイルにしてみよう の回で紹介した Tips を使って SxNotesError.lss というテキストファイルにして Notes プログラムディレクトリに保存し、(Declarations) には
%INCLUDE "SxNotesError.lss"
と指定することで実現することもできます。
■ 参考: OSLoadString</p>
Dim sxErr As New SxNotesError(errorNumber&)
というような形でクラスオブジェクトを初期化して、GetErrMessage メソッドでエラーメッセージを取得してください。例えば errString$ = sxErr.GetErrMessage というような感じです。
Declare Function OSLoadString Lib "nnotes" (Byval handle As Integer, Byval errNum As Integer, Byval buffer As Lmbcs String, Byval textLen As Integer) As Integer
Const STS_REMOTE = &H4000
Const STS_DISPLAYED = &H8000
Class SxNotesError
Private errNum As Long
Public MaskOffErrCode As Integer
Sub New(errorNum As Long)
Me.errNum = errorNum
'*** PROPERTIES ***
MaskOffErrCode = GetMaskOffErrCode
End Sub
Private Function GetMaskOffErrCode As Integer
If Me.errNum And STS_DISPLAYED Then
Me.errNum = Me.errNum And (&HFFFF Xor STS_DISPLAYED)
End If
If Me.errNum And STS_REMOTE Then
Me.errNum = Me.errNum And(&HFFFF Xor STS_REMOTE)
End If
GetMaskOffErrCode = Me.errNum
End Function
Function GetErrMessage As String
Dim errLen As Integer
Dim retBuffer As String
retBuffer = String$(255,0)
errLen = OSLoadString(0, Me.MaskOffErrCode, retBuffer, Len(retBuffer)-1)
GetErrMessage = retBuffer
End Function
End Class
LotusScript のボタンを作って (Declarations) に上のソースを全て入力し、Click イベントに以下のようなコードを入れるとエラーコードを入力してメッセージをチェックするシミュレーションができます。また別のテクニックとして lss ファイルにしてみよう の回で紹介した Tips を使って SxNotesError.lss というテキストファイルにして Notes プログラムディレクトリに保存し、(Declarations) には
%INCLUDE "SxNotesError.lss"
と指定することで実現することもできます。
Sub Click(Source As Button)
Dim sxErr As New SxNotesError(Clng(Inputbox$("エラーコード")))
Msgbox sxErr.GetErrMessage
End Sub
■ 参考: OSLoadString</p>