For strings, just use Ptr{Ptr{Cchar}}
in the ccall type signature, and the rest is done by Julia. You can refer to https://docs.julialang.org/en/v1/manual/calling-c-and-fortran-code/#man-bits-types. As for the case in ModernGL.jl, simply passing a vector of strings is fine.
I have created a demo for this, feel free if you have any questions!
Any
is a Julia specific container that is capable of holding any Julia value, just like void *
in C. Generally, this is used to pass extra arguments to C functions, which will eventually be used by a Julia function. This blog post demonstrates the typical use case. As Julia objects are far more complicated than simple pointers, this is not equivalent to a reference or pointer.