![]() |
![]() |
Про СPConvert |
> Привет Михаил
> Поковырял твою СPConvert и не понял, а почему DLL'ка
аж 90 кил ? Debug ? Wizard ?
Об оптимизации? Хм... у меня даже и мысли такой не
было :-) чего в VC получается, то и ладно...
> Потом вызов не очень удобный Вот
получилось у меня так
Хм... чего не делай, всегда кому-нибудь и
чего-нибудь не понравится, так что я прямо так, в
чистом виде, и приведу :-)
> P.S. Извини я readme писать не умею, уж
как смог, что бы не перескрипели мозги :-)
Ну-ну... писателями не рождаются :-)
* Ковертор кодовых страниц
* Использует SRC код Михаила Дроздова из CPCONV.CPP
*
* Формат:
* nCPFrom = Code Page исходной строки
* nCPTo = COde Page целевой строки
* cString = Строка для преобразования
*
* Пример Исходная строка 866 -> koi8r -> 1251
*
* ? Conv(20866,1251,Conv(866,20866,ANSITOOEM('Это проверка')))
*
* Не совсем понятно почему не работает 21866 ( а жто что за CODEPAGE ?)
* И некоторые другие, что видимо связано с nLocaleID используемой
* STRCONV, что мою 1049 они ни фига не переваривают.
*
* Пирожков Вадим
* piva@kurgan.isp.ru
*
lparameter nCPFrom, nCPTo, m.cString
Declare Integer MultiByteToWideChar in Win32Api ;
Integer CODEPAGE ,;
Integer Flags,;
String Multi ,;
Integer LenMutli ,;
String @ Wide,;
Integer LenWide
Declare Integer WideCharToMultiByte in Win32Api ;
Integer CODEPAGE ,;
Integer Flags,;
String Wide ,;
Integer LenWide ,;
String @ Multi,;
Integer LenMulti,;
string ,;
string
Declare Integer IsValidCodePage in Win32Api Integer ;
Integer CodePage
if vartype(nCPFrom)#'N' and IsValidCodePage(nCPFrom) # 1
MessageBox("Кодовая страница "+Ltrim(Str(nCPFrom);
+" не поддерживается системой",64)
Return ""
endif
If vartype(nCPTo) # 'N' and IsValidCodePage(nCPTo) # 1
MessageBox("Кодовая страница "+Ltrim(Str(nCPTo);
+" не поддерживается системой",64)
Return ""
endif
if vartype(cString)#'C'
Return ""
endif
local buf, out, dst, k, j
buf=space(len(m.cString)*2) && UNICODE 2 байта на символ
out=space(len(m.cString)*2) && DOUBLEBYTE я думаю тоже
* Преобразовать строку в UNICODE кодовой страницы nCPFrom
k=MultiByteToWideChar(nCPFrom,1,cString,len(cString),@buf,len(buf))
if k > 0
dst=left(buf,k*2)
* Преобразовать строку из UNCODE в кодовую страницу nCPTo
j=WideCharToMultiByte(nCPTo,0x0200,dst,len(dst),@out,len(out),0,0)
if j > 0
* Можно вернуть строку и так
Return left(out,j/2)
* Но было бы правильнее преобразовать ее в из doubleByte
* Return STRCONV(left(out,j/2),2)
endif
endif
Return ""
Пирожков Вадим piva@kurgan.isp.ru
