Здравствуйте, vabe, Вы писали:
V>Для WM нет. Там нет реализации для Sciter на WM (только для HTMLayout). Судя по всему HTMLayout не сильно изменился, поэтому код возможно будет работать и с обновленными версиями.
Сложно быть не должно. Лично я упёрся только в отсутствие маршалинга для ANSI строк. В итоге родилось такое
public sealed class MarshalCF
{
unsafe public static string PtrToStringAnsi(IntPtr ptr)
{
byte* lpStart = (byte*)ptr;
byte* lpEnd = lpStart;
for (; *lpEnd != 0; ++lpEnd)
{
}
Decoder decoder = Encoding.ASCII.GetDecoder();
char[] buffer = new char[decoder.GetCharCount(lpStart, (int)(lpEnd - lpStart), true)];
fixed (char* lpBuffer = buffer)
{
decoder.GetChars(lpStart, (int)(lpEnd - lpStart), lpBuffer, buffer.Length, true);
}
return new string(buffer, 0, buffer.Length);
}
unsafe public static IntPtr StringToHGlobalAnsi(string value)
{
Encoder encoder = Encoding.ASCII.GetEncoder();
fixed (char* lpValue = value)
{
int stringLength = encoder.GetByteCount(lpValue, value.Length, true);
IntPtr lpString = Marshal.AllocHGlobal(stringLength);
encoder.GetBytes(lpValue, value.Length, (byte*)lpString, stringLength, true);
return lpString;
}
}
}
Используйте на здоровье