UseDoubleAsPointer (NotesSession - LotusScript)

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