If you look at the public documentation for DllBind in Unrealscript, they give you an exact example of how to handle strings when passing between unrealscript and c++:
https://docs.unrealengine.com/udk/Three/DLLBind.html
You just have to create a struct in unrealscript to match what c++ expects (with the string, the bytes num and bytes max).
Yes, zeroing the high 32 is fully reliable. You just have to be conscious of how you are passing values back and forth between unrealscript and c++. For instance if you want to pass an int64 to unrealscript, you will have to break it down and wrap it in whatever struct to hold both the low and high 32bits.
Take a look at the " Supported Parameter Types" section of the documentation i sent. It is very useful.