Have you tried changing callback signature like this?
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void Data(IntPtr data);
private unsafe static void HandleData(IntPtr data)
{
byte* charPtr = (byte*)data;
// work with bytes here (which are single-byte chars).
}
Here you need to be cautios and check for null character manually.