- すべてのスーパー・インタフェース:
Linker.OptionPREVIEW
- 含まれているインタフェース:
Linker.OptionPREVIEW
public static sealed interface Linker.Option.CaptureCallState extends Linker.OptionPREVIEW
CaptureCallState
は、JavaプラットフォームのプレビューAPIです。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
ダウン・コール・メソッド・ハンドルに関連付けられた外部関数をコールした直後に実行状態の一部を保存するためのリンカー・オプション。実行時に上書きしたり、従来の方法で読み取ることができます。
実行状態は、ユーザーが提供したネイティブ・セグメントにダウン・コール・メソッド・ハンドルに書き込むことで、起動時のダウン・コール・メソッド・ハンドルによって取得されます。 このために、Linker.Option.captureCallState(String[])
PREVIEWオプションにリンクされたダウン・コール・メソッド・ハンドルには、ターゲット・アドレスの直後に追加のMemorySegment
PREVIEWパラメータ、およびオプションのSegmentAllocator
PREVIEWパラメータが含まれます。 このパラメータは、取得された状態が書き込まれるネイティブ・セグメントを表します。
ネイティブ・セグメントには、ダウン・コール・ハンドルのリンクに使用される特定のCaptureCallState
インスタンスを含むレイアウト「関連」が必要です。
このネイティブ・セグメントから取得された状態を取得するには、CaptureCallState
インスタンスに関連付けられたlayoutからvarハンドルを構築します。
次の例は、このリンカー・オプションの使用を示しています:
MemorySegment targetAddress = ...
CaptureCallState ccs = Linker.Option.captureCallState("errno");
MethodHandle handle = Linker.nativeLinker().downcallHandle(targetAddress, FunctionDescriptor.ofVoid(), ccs);
VarHandle errnoHandle = ccs.layout().varHandle(PathElement.groupElement("errno"));
try (Arena arena = Arena.openConfined()) {
MemorySegment capturedState = arena.allocate(ccs.layout());
handle.invoke(capturedState);
int errno = errnoHandle.get(capturedState);
// use errno
}
-
ネストされたクラスのサマリー
インタフェースjava.lang.foreign.Linker.OptionPREVIEWで宣言されたネストされたクラス/インタフェース
Linker.Option.CaptureCallStatePREVIEW
-
メソッドのサマリー
-
メソッドの詳細
-
layout
StructLayoutPREVIEW layout()このCapturedCallState
インスタンスにリンクされたダウン・コール・ハンドルに渡されるネイティブ・セグメントのレイアウトを表す構造体のレイアウトを返します。- 戻り値:
- この
CapturedCallState
インスタンスにリンクされたダウン・コール・ハンドルに渡されるネイティブ・セグメントのレイアウトを表す構造体レイアウト
-
supported
この実装で取得できる状態の名前を返します。- 戻り値:
- この実装で取得できる状態の名前
-
CaptureCallState
を使用できます。