Re[6]: Aнонс: Lightweight Sciter binding for .NET
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.10.08 20:04
Оценка:
Здравствуйте, 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;
            }
        }
    }

Используйте на здоровье
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.