You can use the LabVIEW-supplied LStrBuf function (see extcode.h, labview.lib) to get a pointer to the actual string data. I believe what you pass to this is a dereferenced LStrHandle; i.e., if your DLL function's cluster contains an LStrHandle called "myString", you'd do something like this (note the asterisk):
MessageBox(NULL, LStrBuf(*myString), "My string", 0L);
See the manual entitled
Using External Code in LabVIEW for more details.
On your second question: you're right; with individual strings/arrays, App Builder offers the choice between C string pointers or LabVIEW string handles, but in clusters we are forced to use handles. I ha
ve asked NI to offer a choice inside clusters as well; perhaps if enough of us ask, they may implement this feature.