Normally, you need a mechanism to get the size of the data. See for instance GetClipboardFormatName.
So, let's say you have a function "ArrayOfStrings". You could make the prototype int ArrayOfStrings (LPTSTR lpszBuffer, int SizeOfBuffer).
If you call this function like this:
NeededBufferSize = ArrayOfStrings (NULL, 0)
ArrayOfStrings knows how big the buffer should be. If SizeOfBuffer is too small, the needed size is returned in NeededBufferSize.
Of course, you can make ArrayOfStrings so it accepts a pointer to the buffer size, so the needed value is returned in SizeOfBuffer, and the return value is -1, or another error value.
Now for the data...
Normally Arrays of strings are passes as NULL terminated strings, and the array is terminated with NULL NULL. In LabVIEW, I'd make my input buffer an array of U8's, with the right size. When it returns, you can get strings from it by searching for 0, until you find two 0's.
Returning one string at the time doesn't really solve the problem, since you don't know how long each string is going to be.
If your function takes a long time, you need to cache the results.
Regards,
Wiebe.