In that case you need some way to work out what the types are. The calling convention in C means that the calling function places the items on the stack then calls the function, so one way is to do what printf does and to match the %-codes with the parameters. Another way might be for the parameters to be delivered in pairs where one indicates the type and the other the value, for example
func(2, TYPE_INT,1, TYPE_PCHAR,"Hello");