167. Calling the modf() foreign function
Let’s consider that we want to call the modf()
foreign function. This function is part of the C standard library with the following syntax (https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/modf-modff-modfl):
double modf(double x, double *intptr);
This method gets a double x
and returns the signed fractional part of x
. The intptr
is a pointer argument used to point to the memory address where the integer part should be stored as a double
value.
Since this method is part of UCRT, it can be found via defaultLookup()
:
Linker linker = Linker.nativeLinker();
SymbolLookup libLookup = linker.defaultLookup();
try (Arena arena = Arena.ofConfined()) {
MemorySegment segmentModf = libLookup.find("modf").get();
...
Nothing new so far! Next, we need to define the proper MethodHandle
. Because the second argument of modf()
is a pointer, we need to specify a value layout of type ADDRESS
:
MethodHandle...