Помогите оптимизировать функцию перевода текста из UTF-8

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Помогите оптимизировать функцию перевода текста из UTF-8

Сообщение Mihail_ » 12.03.2009 (Чт) 23:14

Здравствуйте, нашел на форуме функцию перевода текста из UTF-8

Код: Выделить всё
Private Declare Function LocalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Private Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Const CP_UTF8 As Long = 65001
Private Const LMEM_ZEROINIT As Long = &H40


Public Function UTF8ToWin(ByRef inString As String, ByVal lMaxSize As Long) As String

Dim hMemLock1 As Long, hMemLock2 As Long
Dim iStrSize As Long


hMemLock1 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
hMemLock2 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)

iStrSize = MultiByteToWideChar(CP_UTF8, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)

If Len(iStrSize) Then
UTF8ToWin = String$(iStrSize, 0&)
Call CopyMemory(ByVal UTF8ToWin, ByVal hMemLock2, iStrSize)
End If

Call LocalFree(hMemLock1)
Call LocalFree(hMemLock2)
End Function


Я так понимаю, тут заботились о сохранности ресурсов компьютера, но проблема в том что мне эту функцию надо вызывать много и часто и в нынешнем ее виде это части приводит к падению приложения. Помогите пожалуйста ее оптимизировать под частые вызовы..
Заранее спасибо!

p.s. образец текста - Скрат. РќРµ время для орехов

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Помогите оптимизировать функцию перевода текста из UTF-8

Сообщение MIT » 12.03.2009 (Чт) 23:39

Цикл из десяти тысяч вызовов функции (с твоим текстом) не выявил ни единственного подозрения на ошибку. Может ты ее юзаешь не правильно?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Re: Помогите оптимизировать функцию перевода текста из UTF-8

Сообщение Mihail_ » 13.03.2009 (Пт) 0:38

да, очень извиняюсь, мой косяк был :oops:

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Помогите оптимизировать функцию перевода текста из UTF-8

Сообщение arthur2 » 13.03.2009 (Пт) 14:34

Mihail_ писал(а):а, очень извиняюсь, мой косяк был :oops:

Да нет, это не твой косяк - этот код действительно время от времени рушит всё на своём пути, причём, довольно непредсказуемо.

А нужно всего-то вместо всяких разных LocalAlloc, которые здесь нафиг не нужны, использовать обычные строки :)

См здесь: http://forum.sources.ru/index.php?showt ... &p=1913064

Кстати, если код ты нашёл в моём топике, то стоило скачать и выложенный там файл - там эта функция исправлена.
Артур
 
   

Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Re: Помогите оптимизировать функцию перевода текста из UTF-8

Сообщение Mihail_ » 13.03.2009 (Пт) 21:09

отличный пример адаптированного кода, спасибо!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 15

    TopList