Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите сделать перекодировку

2.0K
30 октября 2004 года
Andi_SPAWN
69 / / 28.02.2004
Кто подскажет как можно перекодировать текст из DOC в Windows. Я использовал API фуркцию:

Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" _
(ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Option Explicit

Private Sub cmdStart_Click()
Dim sSource As String
Dim sDestination As String
Dim lReturn As Long

SSource=”Текст в кодировке DOC”
lReturn = OemToChar(sSource, sDestination)
txtTest.Text = sDestination
End Sub

После визова этой функции в переменную sDestination должен возвращатся перекодированый текст, но она остается пустой, почему? Что я неправильно делаю?
459
01 ноября 2004 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by Andi_SPAWN
Кто подскажет как можно перекодировать текст из DOC в Windows. Я использовал API фуркцию:

Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" _
(ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Option Explicit

Private Sub cmdStart_Click()
Dim sSource As String
Dim sDestination As String
Dim lReturn As Long

SSource=”Текст в кодировке DOC”
lReturn = OemToChar(sSource, sDestination)
txtTest.Text = sDestination
End Sub

После визова этой функции в переменную sDestination должен возвращатся перекодированый текст, но она остается пустой, почему? Что я неправильно делаю?


Тут вот такая тонкость, а может и глюк.
Ф-ция OemToCharA не может менять размер строки sDestination. Поэтому либо пиши
lReturn = OemToChar(sSource, sSource)
либо задай длину sDestination равной sSource (можно просто sDestination=sSource )

4.4K
01 ноября 2004 года
blind rain
66 / / 20.07.2004
Да , если sDestination =Space(Len(sSource))
работает
10
04 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by gacol
Тут вот такая тонкость, а может и глюк.
Ф-ция OemToCharA не может менять размер строки sDestination.


Тонкость заключается в различии понятия строки в VB и WinAPI. Никаких глюков.

lReturn = OemToChar(sSource, sSource)

С точки зрения распределения памяти изменение исходной строки будет работать быстрее. Код Windows API в этом случае работает безопасно по отношению к вызывающей программе.

4.4K
05 ноября 2004 года
blind rain
66 / / 20.07.2004
Цитата:
Originally posted by smartsoft

Тонкость заключается в различии понятия строки в VB и WinAPI. Никаких глюков.

lReturn = OemToChar(sSource, sSource)

С точки зрения распределения памяти изменение исходной строки будет работать быстрее. Код Windows API в этом случае работает безопасно по отношению к вызывающей программе.



Лично для меня несколько странно, что API функция с параметром в Declare ByVal sDestination As String что-то может изменять. Понятно, что волшебство в Declare. Я часто заменяю декларацию, выдаваемую API Viewer на то, что более соответствует сигнатуре API функции - на адрес памяти: ByVal lpDestination As Long, ну и соответственно использую VarPtr(), StrPtr(). Конечно, это не всегда хорошее решение. Как говориться, будь проще - будет лучше.

10
05 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by blind rain
Лично для меня несколько странно, что API функция с параметром в Declare ByVal sDestination As String что-то может изменять. Понятно, что волшебство в Declare. Я часто заменяю декларацию, выдаваемую API Viewer на то, что более соответствует сигнатуре API функции - на адрес памяти: ByVal lpDestination As Long, ну и соответственно использую VarPtr(), StrPtr().


Ну, это уже чисто бейсиковские приколы. Хотели сделать как лучше, а получилось как всегда.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог