
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Сообщ.
#1
,
|
|
|
Народ, просвятите в чем разница между этими функциями. Я понял лишь одно у них разные типы входных строковых параметров. И так вопрос: зачем это нужно??? В своей проге я использовал только функции без префиксов(тоесть без A и W), к чему это может привести?
![]() P.S. только пожалуйста не давайте ссылок на MSDN, обясните по русски если можно... ![]() P.P.S. простите за ламерский вопрос... |
![]() |
Сообщ.
#2
,
|
|
CreateFileA - принимает имя файла в анси, W - в Юникод формате. Вот и вся разница. CreateFile и CreateFileA - в дельфи - это одно и тоже.
|
Сообщ.
#3
,
|
|
|
CreateFile это псевдоним
|
Сообщ.
#4
,
|
|
|
А где и в каких случаях может использоватся функция CreateFileW, да и зачем собственно передавать что-то в юникод формате??? я че то не понимаю...
|
Сообщ.
#5
,
|
|
|
например, если операционка поддерживает много языков, то и имена файлов можно так же обзывать. в 256 кодов нереально сунуть много символов (из всех-то языков). Для этого нужны юникоды, в который влезает 65535 символов + #0, чего вполне хватит на несколько языков, да и останется еще
Вот чтобы была возможность передавать такие имена и нужны функции, читающие юникод |
Сообщ.
#6
,
|
|
|
BenQ
В NT системах всегда используется xxxW. Даже если в программе используется ansi, то функция xxxA преобразовывает текст в юникод и вызывает xxxW. |
Сообщ.
#7
,
|
|
|
Только в Win98/Me например юникод поддерживается плохо, могут возникнуть проблемы. А WinCE вроде только юникод и понимает.
Если планируешь чтобы прога была мультиязычной, то возможно есть смысл подумать про UniCode. |
Сообщ.
#8
,
|
|
|
Так и еще вопросик: моя программа написана только с использование вызовов функций без префиксов(A и W).
Будет ли она корректно работать на разноязычных системах. Например если Windows китайская или итальянская какая нибудь стоит, то моя прога будет корректно работать???. И еще вопрос: допустим в проге есть вызов MessageBox(0,'некоторое сообщение на русском','тема на русском',mb_ok), то как это сообщение отобразится допустим в итальянской версии винды(где русский не установлен). Или если текст английский то он будет корректно отображен??? |
![]() |
Сообщ.
#9
,
|
|
Цитата BenQ @ еще вопрос: допустим в проге есть вызов MessageBox(0,'некоторое сообщение на русском','тема на русском',mb_ok), то как это сообщение отобразится допустим в итальянской версии винды(где русский не установлен). кракозябликами это будет отображено. Цитата BenQ @ Или если текст английский то он будет корректно отображен??? да |
Сообщ.
#10
,
|
|
|
Цитата BenQ @ моя программа написана только с использование вызовов функций без префиксов(A и W) Без префикса = с префиксом A Добавлено Кстати, префикс - это то, что идет перед словом, а после слов - постфикс ![]() |
Сообщ.
#11
,
|
|
|
А как дело обстоит с названиями папок и файлов в разноязычных системах? Например папки автозагрузки, temp, там также называются или по другому? И хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???).
И вообще в китайских(и т.д. и т.п.) системах названия всех системных папок и ключей в реестре на английском или на китайском??? |
Сообщ.
#12
,
|
|
|
Дельфи ниже Delphi for .NET весьма плохо дружит с Юникодом, все API операции ведутся через ANSI.
В файле Windows.pas алиасы мапируются на хххА прототипы. |
Сообщ.
#13
,
|
|
|
Цитата BenQ @ А как дело обстоит с названиями папок и файлов в разноязычных системах? Например папки автозагрузки, temp, там также называются или по другому? И хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???). И вообще в китайских(и т.д. и т.п.) системах названия всех системных папок и ключей в реестре на английском или на китайском??? |
Сообщ.
#14
,
|
|
|
Цитата BenQ @ А как дело обстоит с названиями папок и файлов в разноязычных системах? Например папки автозагрузки, temp, там также называются или по другому? И хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???). В реестр лезть за этим не обязательно, а может даже и не совсем желательно. Есть функция SHGetSpecialFolderLocation. |
Сообщ.
#15
,
|
|
|
Цитата s-mike @ В реестр лезть за этим не обязательно, а может даже и не совсем желательно. Есть функция SHGetSpecialFolderLocation. Дело в том что моя прога хранит свои настройки в реестре. И получает некоторые системные настройки из реестра дак вот отсюда и вопрос: Цитата s-mike @ хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???). Кто может объяснтить этот момент? |
Сообщ.
#16
,
|
|
|
Цитата BenQ @ Дело в том что моя прога хранит свои настройки в реестре. Ты не знаешь где хранишь свои настройки? Для переносимости между системами называй их только по английски. |
Сообщ.
#17
,
|
|
|
Цитата BenQ @ дак вот путь к этому ключу допустим в итальянской системе будет таким же???). Такими же, естественно. Структура реестра не меняется в Виндовсах с разными языками. Тем более в XP это делается с помощью MUI, которое к реестру не имеет никакого отношения. |
Сообщ.
#18
,
|
|
|
Ну подскажите, а???
|
Сообщ.
#19
,
|
|
|
Цитата BenQ @ Ну подскажите, а??? А какие еще у тебя вопросы остались? |
Сообщ.
#20
,
|
|
|
Цитата s-mike @ А какие еще у тебя вопросы остались? Так... допустим имеется файл, найденный при помощи стандартных функций поиска FindFirstFile, FindNextFile. Но один ньюанс... Имя этого файла на китайском или другом языке(ведь такое может быть???). Дак вот моя программа использующая функции без постфиксов(тоесть после имени функции нет W - FindFirst, а не FindFirstW), сможет корректно осуществить доступ к такому файлу? какие здесь возможны варианты? ![]() |
Сообщ.
#21
,
|
|
|
Цитата BenQ @ Дак вот моя программа использующая функции без постфиксов(тоесть после имени функции нет W - FindFirst, а не FindFirstW), сможет корректно осуществить доступ к такому файлу? Файл будет доступен на той системе, которая поддерживает юникод-имена файлов при использовании любой функции FindFirst. Но вот назвать или переименовать файл нужно будет с помощью xxxW. |
Сообщ.
#22
,
|
|
|
Цитата s-mike @ Файл будет доступен на той системе, которая поддерживает юникод-имена файлов при использовании любой функции FindFirst. Но вот назвать или переименовать файл нужно будет с помощью xxxW. Мне нужно получить полную совместимость в этом деле. Не подскажешь как тут быть? Какие проверки делать, а главное как, я никогда раньше с этим не сталкивался? И ксати: Цитата s-mike @ Файл будет доступен на той системе, которая поддерживает юникод-имена файлов при использовании любой функции FindFirst. Например??? |
Сообщ.
#23
,
|
|
|
Цитата BenQ @ Мне нужно получить полную совместимость в этом деле. Не подскажешь как тут быть? Какие проверки делать, а главное как, я никогда раньше с этим не сталкивался? Я же говорю, если просто открыть, прочитать и сохранить или же получить список файлов, то все это получится сделать, единственное что - названия файлов могут отображаться неправильно (в самом приложении). Цитата BenQ @ Например??? 2000, XP... |
Сообщ.
#24
,
|
|
|
s-mike, а вообще имя этого файла на китайском(и т.д...) можно будет поместить в переменную типа String или тут нужна WideString? я вообще запутался... какие бы доки почитать на эту тему???...
![]() ![]() |
Сообщ.
#25
,
|
|
|
Цитата BenQ @ можно будет поместить в переменную типа String или тут нужна WideString? WideString |
Сообщ.
#26
,
|
|
|
Цитата s-mike @ WideString s-mike, а как же тогда быть, как сделать программу совместимой??? Неужели мне придется замянять в проге все String'и на WideString'и? или как тут быть? пожалуйста разъясни поподробнее... Please... |
Сообщ.
#27
,
|
|
|
Цитата BenQ @ Неужели мне придется замянять в проге все String'и на WideString'и? или как тут быть? пожалуйста разъясни поподробнее... Please... Нет, String должен содержать те же данные, что и WideString, но отображать их не сможет, поскольку все использующиеся по умолчанию в Дельфи функции АПИ расчитаны на ASCII-кодировку. Поэтому придется использовать компоненты, поддерживающие юникод - TNT Controls, например. Тип string можно спокойно использовать, но в сочетании со специфическими функциями - то есть xxxW вместо xxxA. Всю работу должен сделать typecast. Сайт TNT Controls http://www.tntware.com. И тут есть инфа http://www.lischke-online.de/. |
Сообщ.
#28
,
|
|
|
s-mike, все дело в том что мне нужно решить данную проблемму без использования сторонних компонентов. Я пишу программу на чистом winAPI.
Цитата s-mike @ Тип string можно спокойно использовать, но в сочетании со специфическими функциями - то есть xxxW вместо xxxA А вот этот момент если можно поподробней, а именно меня интересует каким образом производить выбор между тем какую функцию использовать - тоесть xxxA или xxxW(если можно то приведи какой нибудь простенький код, иллюстрирующий данную фичу). |
Сообщ.
#29
,
|
|
|
s-mike, не покидай меня.
|
Сообщ.
#30
,
|
|
|
Цитата BenQ @ а именно меня интересует каким образом производить выбор между тем какую функцию использовать - тоесть xxxA или xxxW Уже много раз объяснял, что xxxW. Если использовать WinApi и стандартные контролы, то они должны поддерживать юникод. |