Hello fellow camels!
I’ve recently fell in love with OCaml and use it on my free time a lot lately.
Are there any good sources to learn how the Ctypes library works? I’m trying to interact with a c library called QuickLZ as there doesn’t seem to be a native way to interact with files that are QuickLZ compressed (GitHub - RT-Thread-packages/quicklz: the world's fastest compression library).
I’m able to interact with most functions within the library but when it comes to more advanced calls that takes c structs I’m getting stuck. How do I send a qlz_state_decompress struct to the function?
Mainly it is this function I am not able to interact with:
size_t qlz_decompress(const char *source, void *destination, qlz_state_decompress *state)
{
...
}
Are there any good sources that I could read to be able to read to further my understanding on how to interact with c-libraries?
Thanks
–Hektor
1 Like
Maybe this example may help you
module InterfaceInfo = struct
let init_func = funptr @@ repr @-> repr @->> void
let finalize_func = funptr @@ repr @-> repr @->> void
type t
let t : t structure typ = structure "GInterfaceInfo"
let interface_init = field t "interface_init" init_func
let interface_finalize = field t "interface_finalize" finalize_func
let interface_data = field t "interface_data" repr
let () = seal t
end
Here is how you define the shape of a C structure, (just in case repr
is void *
) and here is how you use it.
let interface_info = make InterfaceInfo.t in
setf interface_info InterfaceInfo.interface_init init;
setf interface_info InterfaceInfo.interface_finalize interface_default_finalize;
setf interface_info InterfaceInfo.interface_data null;
do_something param1 param2 (addr interface_info)
Obviously, there is no need to create a separate module to define a structure
that is just an example
1 Like