Проблемка с файлами на китайском языке

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

Проблемка с файлами на китайском языке

Сообщение Inferno » 03.02.2005 (Чт) 11:46

Доброе время суток.
Суть проблемы: Имеются папки и файлы на китайском языке. После выбора файла через соммоdialog и потом проверки через FileExist- матюгается, что такого файла нет. Если вывести полученный путь к файлу, то китайские символы заменяет знаками вопросов.
Пробовал выбирать файлы и через API- тажа ерунда.
Пример:
c:/folder/"Папка на китайском"/1/
будет выведен как с:/folder/Я идиот! Убейте меня, кто-нибудь!????/1/
Может кто-то подскажет как боротся с такой проблемкой.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 03.02.2005 (Чт) 11:56

Все ANSI-версии API-функций замени на Unicode :)

Например, была функция:
Код: Выделить всё
Private Declare Function BlaBlaBla Lib "rtfm32.dll" _
Alias "BlaBlaBlaA" (ByVal dwNumber As Long, _
ByVal lpstrData As String) As Long

И вызывал ты ее так:
Код: Выделить всё
...
Dim lRes As Long
Dim sMyString As String, lNum As Long
sMyString = "RTFM!"
lNum = &H0&
lRes = BlaBlaBla(lNum, sMyString)
...


А стала:
Код: Выделить всё
Private Declare Function BlaBlaBla Lib "rtfm32.dll" _
Alias "BlaBlaBlaW" (ByVal dwNumber As Long, _
ByVal lpstrData As Long) As Long

И вызывается так:
Код: Выделить всё
...
Dim lRes As Long
Dim sMyString As String, lNum As Long
sMyString = "RTFM!"
lNum = &H0&
lRes = BlaBlaBla(lNum, VarPtr(sMyString))
...
Моду создают модоки, а распространяют модозвоны.

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 03.02.2005 (Чт) 12:08

Насколько я понял из вышенаписанного разница между названиями анси функций и юникодовых в последней букве алиаса,
тоесть если стоит
Код: Выделить всё
Alias "BlaBlaBlaA"
-то это анси функция
а если
Код: Выделить всё
Alias "BlaBlaBlaW"
- ТО это юникодовая.
Я понял правильно?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.02.2005 (Чт) 12:15

Да.
Плюс следует учитывать, что при вызове API VB в любом случае производит конвертацию. Поэтому надо передавать указатель, VarPtr/StrPtr.
Lasciate ogni speranza, voi ch'entrate.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList  
cron