The source has a comment about a special case for variadic functions -
// There is a special case when the last argument of fptr is a variadic interface (or []interface}
// it will be expanded into a call to the C function as if it had the arguments in that slice.
// This means that using arg ...interface{} is like a cast to the function with the arguments inside arg.
// This is not the same as C variadic.
Does this mean they are not supported? I made my own library in C and am unable to find a way to get my function to see any of the variadic parameters.
void printSomething(int a, const char *fmt, ...)
{
va_list ap;
printf("start %d\n", a);
printf("fmt %s\n", fmt);
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
printf("\n");
printf("end %d\n", a);
}
Calling code:
var printSomething func(int, string, []interface{})
purego.RegisterLibFunc(&printSomething, libcraig, `printSomething`)
printSomething(5, `%s`, []interface{}{`foo`})
This prints:
start 5
fmt %s
(null)
end 5
The source has a comment about a special case for variadic functions -
Does this mean they are not supported? I made my own library in C and am unable to find a way to get my function to see any of the variadic parameters.
Calling code:
This prints: