You should be able to use either strings or StringBuilders.

The important thing, above anything else is that since you're dealing with an unmanaged code that is expecting to use a reference to a unicode string that you should specify to the Marshaler how to marshal your string.

You'll need to use the attributing:

[MarshalAs(UnmanagedType.LPWStr)] // I'm guessing LPWStr, test this.

Read up on UnmanagedType, and marshalling strings

Edit, you may have to pass it as IntPtr instead, as you're needing to deal with levels of indirection.