WideCharToMultiByte

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

WideCharToMultiByte

Сообщение Tauron » 20.05.2003 (Вт) 18:52

В общем: кто работал с сабжем? А то у меня чего-то не получается. Пример из Api-Guide не предлагать. Там из апишная функция изначально возвращает указатель на строку в виде переменной типа Long, а тут такая фишка не пройдет - я строки из файла читаю.
Трезвая голова, холодный ум и ледяное сердце.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.05.2003 (Вт) 19:00

Я бы использовал API CopyMemory для того чтобы положить строку в нужный буфер... Предварительно сделав ему GlobalAlloc и GlobalLock. И вернул бы его адрес. Не знаю, правда, насколько я прав :?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 21.05.2003 (Ср) 11:12

Не знаю, поможет ли это, но...

Есть недокументированная функция StrPtr, которая возвращает адрес массива символов строки.

Код: Выделить всё
Private Declare Function GetACP Lib "kernel32" () As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (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, lpUsedDefaultChar As Long) As Long

Public Function WToA(ByVal st As String, Optional ByVal cpg As Long = -1, Optional lFlags As Long = 0) As String
Dim stBuffer As String
Dim cwch As Long
Dim pwz As Long
Dim pwzBuffer As Long
   
    If cpg = -1 Then cpg = GetACP()

    pwz = StrPtr(st)
    'получаем нужную длину буфера
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, 0&, 0&, ByVal 0&, ByVal 0&)

    stBuffer = String$(cwch + 1, vbNullChar)
    pwzBuffer = StrPtr(stBuffer)
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, pwzBuffer, Len(stBuffer), ByVal 0&, ByVal 0&)

    WToA = Left$(stBuffer, cwch - 1)
End Function


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

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

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

    TopList