Double を使用して、C API 呼び出しの 64 ビット ポインター引数を処理できるようになります。
NotesSession
call notesSession.UseDoubleAsPointer=True
LotusScript にはポインタ型がないため、LotusScript エージェントを使用して C API 64ビットポインタを呼び出すと問題が発生する可能性があります。 HCL Domino 12.0.1 で導入された UseDoubleAsPointer メソッドは、Double 型で C API 64ビットポインタ引数を処理できるようにすることで、この制限を回避します。 Long 型はポインタとして使用されることもありましたが、現在では C ポインタを扱うには小さすぎることに注意してください。
この回避策は、以前は Domino の notes.ini 設定で LS64BITCCALLOUTPointerSupport=1 を使用することで可能でしたが、notes.ini によるアプローチでは、サーバー上のすべての LotusScript エージェントに適用されるという問題がありました。
UseDoubleAsPointer には、LotusScript コーディング用の Domino Designer 12.0.1 クライアントが少なくとも 1 つ、LotusScript エージェントを実行するための Domino 12.0.1 サーバーが少なくとも 1 つ必要です。 注: Notesクライアントは単一のバックエンドセッションで実行されます。スクリプトでこの値がTrueに設定されている場合は、C APIコールアウト後に値を falseにリセットして、後続のスクリプトで正しい Double の動作が使用されるようにしてください。
次のメソッドを使用して開始および停止しますUseDoubleAsPointer(簡潔にするために一部は省略されています)。
session.UseDoubleAsPointer = True
Print "Calling OSMemAlloc with size, setting active", dwDWordOne
wWordOne = OSMemAlloc(wWordTwo, dwDWordOne, dwDWordTwo)
If(wWordOne = 0) Then
Print "OSMemAlloc worked, continuing with handle", dwDWordTwo
dRetDouble = OSLockObject(dwDWordTwo)
If(dRetDouble > 0) Then
Print "OSLockObject worked, calling XXX"
...
OSUnlockObject(dwDWordTwo)
Else
Print "OSLockObject failed"
End If
Print "Freeing memory"
wWordOne = OSMemFree(dwDWordTwo)
End If
session.UseDoubleAsPointer = False