Имеется сей класс, для копирования UTF8
массива символов в неуправляемую память подобно char**
, все ли в нем нормально, и можно ли его улучшить?
public class IntPtrUtf8ArrayStr : IDisposable
{
private bool isDispoed;
public IntPtrUtf8ArrayStr(params string[] value)
{
int summarySize = 0;
Length = value.Length;
byte[][] tmpBytes = new byte[Length][];
for (int i = 0; i < Length; i++)
{
int countBytes = Encoding.UTF8.GetByteCount(value[i]) + 1;
summarySize += countBytes;
tmpBytes[i] = new byte[countBytes];
Array.Copy(Encoding.UTF8.GetBytes(value[i]), tmpBytes[i], countBytes - 1);
tmpBytes[i][countBytes - 1] = (byte)'\0';
}
#if DEBUG
Trace.WriteLine($"Summary bytes in array: {summarySize}", "INFO");
#endif // ! DEBUG
Pointer = Marshal.AllocHGlobal(summarySize);
for (int i = 0; i < Length; i++)
{
for (int j = 0; j < tmpBytes[i].Length; j++)
{
Marshal.WriteByte(Pointer, i * j, tmpBytes[i][j]);
}
}
GC.KeepAlive(this);
}
public IntPtr Pointer { get; private set; }
public int Length { get; private set; }
~IntPtrUtf8ArrayStr()
{
ReleaseUnmanagedResources();
}
private void ReleaseUnmanagedResources()
{
if (isDisposed)
return;
Marshal.FreeHGlobal(Pointer);
Length = 0;
Pointer = IntPtr.Zero;
isDisposed = true;
GC.SuppressFinalize(this);
}
public void Dispose()
{
if (isDisposed)
return;
ReleaseUnmanagedResources();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем доброго времени суток! Есть проблема, мне выбивает такую ошибку:
Добавляю своё свойство в контрол, чтобы его можно было задавать через xaml