На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> CreateFile, CreateFileA, CreateFileW , В чем разница - вопросы совместимости
    Народ, просвятите в чем разница между этими функциями. Я понял лишь одно у них разные типы входных строковых параметров. И так вопрос: зачем это нужно??? В своей проге я использовал только функции без префиксов(тоесть без A и W), к чему это может привести? :blink:

    P.S. только пожалуйста не давайте ссылок на MSDN, обясните по русски если можно... :no:
    P.P.S. простите за ламерский вопрос...
    Сообщение отредактировано: BenQ -
      CreateFileA - принимает имя файла в анси, W - в Юникод формате. Вот и вся разница. CreateFile и CreateFileA - в дельфи - это одно и тоже.
        CreateFile это псевдоним
          А где и в каких случаях может использоватся функция CreateFileW, да и зачем собственно передавать что-то в юникод формате??? я че то не понимаю...
          Сообщение отредактировано: BenQ -
            например, если операционка поддерживает много языков, то и имена файлов можно так же обзывать. в 256 кодов нереально сунуть много символов (из всех-то языков). Для этого нужны юникоды, в который влезает 65535 символов + #0, чего вполне хватит на несколько языков, да и останется еще
            Вот чтобы была возможность передавать такие имена и нужны функции, читающие юникод
              BenQ
              В NT системах всегда используется xxxW. Даже если в программе используется ansi, то функция xxxA преобразовывает текст в юникод и вызывает xxxW.
                Только в Win98/Me например юникод поддерживается плохо, могут возникнуть проблемы. А WinCE вроде только юникод и понимает.
                Если планируешь чтобы прога была мультиязычной, то возможно есть смысл подумать про UniCode.
                  Так и еще вопросик: моя программа написана только с использование вызовов функций без префиксов(A и W).
                  Будет ли она корректно работать на разноязычных системах. Например если Windows китайская или итальянская какая нибудь стоит, то моя прога будет корректно работать???.
                  И еще вопрос: допустим в проге есть вызов MessageBox(0,'некоторое сообщение на русском','тема на русском',mb_ok), то как это сообщение отобразится допустим в итальянской версии винды(где русский не установлен). Или если текст английский то он будет корректно отображен???
                    Цитата BenQ @
                    еще вопрос: допустим в проге есть вызов MessageBox(0,'некоторое сообщение на русском','тема на русском',mb_ok), то как это сообщение отобразится допустим в итальянской версии винды(где русский не установлен).

                    кракозябликами это будет отображено.
                    Цитата BenQ @
                    Или если текст английский то он будет корректно отображен???

                    да
                      Цитата BenQ @
                      моя программа написана только с использование вызовов функций без префиксов(A и W)

                      Без префикса = с префиксом A

                      Добавлено
                      Кстати, префикс - это то, что идет перед словом, а после слов - постфикс :ph34r:
                        А как дело обстоит с названиями папок и файлов в разноязычных системах? Например папки автозагрузки, temp, там также называются или по другому? И хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???).
                        И вообще в китайских(и т.д. и т.п.) системах названия всех системных папок и ключей в реестре на английском или на китайском???
                          Дельфи ниже Delphi for .NET весьма плохо дружит с Юникодом, все API операции ведутся через ANSI.
                          В файле Windows.pas алиасы мапируются на хххА прототипы.
                            Цитата BenQ @
                            А как дело обстоит с названиями папок и файлов в разноязычных системах? Например папки автозагрузки, temp, там также называются или по другому? И хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???).
                            И вообще в китайских(и т.д. и т.п.) системах названия всех системных папок и ключей в реестре на английском или на китайском???
                              Цитата BenQ @
                              А как дело обстоит с названиями папок и файлов в разноязычных системах? Например папки автозагрузки, temp, там также называются или по другому? И хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???).

                              В реестр лезть за этим не обязательно, а может даже и не совсем желательно. Есть функция SHGetSpecialFolderLocation.
                                Цитата s-mike @
                                В реестр лезть за этим не обязательно, а может даже и не совсем желательно. Есть функция SHGetSpecialFolderLocation.

                                Дело в том что моя прога хранит свои настройки в реестре. И получает некоторые системные настройки из реестра дак вот отсюда и вопрос:
                                Цитата s-mike @
                                хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???).

                                Кто может объяснтить этот момент?
                                  Цитата BenQ @
                                  Дело в том что моя прога хранит свои настройки в реестре.

                                  Ты не знаешь где хранишь свои настройки?
                                  Для переносимости между системами называй их только по английски.
                                    Цитата BenQ @
                                    дак вот путь к этому ключу допустим в итальянской системе будет таким же???).

                                    Такими же, естественно. Структура реестра не меняется в Виндовсах с разными языками. Тем более в XP это делается с помощью MUI, которое к реестру не имеет никакого отношения.
                                      Ну подскажите, а???
                                        Цитата BenQ @
                                        Ну подскажите, а???

                                        А какие еще у тебя вопросы остались?
                                          Цитата s-mike @
                                          А какие еще у тебя вопросы остались?

                                          Так... допустим имеется файл, найденный при помощи стандартных функций поиска FindFirstFile, FindNextFile. Но один ньюанс... Имя этого файла на китайском или другом языке(ведь такое может быть???). Дак вот моя программа использующая функции без постфиксов(тоесть после имени функции нет W - FindFirst, а не FindFirstW), сможет корректно осуществить доступ к такому файлу? какие здесь возможны варианты? :wacko:
                                            Цитата BenQ @
                                            Дак вот моя программа использующая функции без постфиксов(тоесть после имени функции нет W - FindFirst, а не FindFirstW), сможет корректно осуществить доступ к такому файлу?

                                            Файл будет доступен на той системе, которая поддерживает юникод-имена файлов при использовании любой функции FindFirst. Но вот назвать или переименовать файл нужно будет с помощью xxxW.
                                              Цитата s-mike @
                                              Файл будет доступен на той системе, которая поддерживает юникод-имена файлов при использовании любой функции FindFirst. Но вот назвать или переименовать файл нужно будет с помощью xxxW.

                                              Мне нужно получить полную совместимость в этом деле. Не подскажешь как тут быть? Какие проверки делать, а главное как, я никогда раньше с этим не сталкивался?

                                              И ксати:
                                              Цитата s-mike @
                                              Файл будет доступен на той системе, которая поддерживает юникод-имена файлов при использовании любой функции FindFirst.

                                              Например???
                                                Цитата BenQ @
                                                Мне нужно получить полную совместимость в этом деле. Не подскажешь как тут быть? Какие проверки делать, а главное как, я никогда раньше с этим не сталкивался?

                                                Я же говорю, если просто открыть, прочитать и сохранить или же получить список файлов, то все это получится сделать, единственное что - названия файлов могут отображаться неправильно (в самом приложении).
                                                Цитата BenQ @
                                                Например???

                                                2000, XP...
                                                  s-mike, а вообще имя этого файла на китайском(и т.д...) можно будет поместить в переменную типа String или тут нужна WideString? я вообще запутался... какие бы доки почитать на эту тему???... :wacko: :blink:
                                                    Цитата BenQ @
                                                    можно будет поместить в переменную типа String или тут нужна WideString?

                                                    WideString
                                                      Цитата s-mike @
                                                      WideString

                                                      s-mike, а как же тогда быть, как сделать программу совместимой???
                                                      Неужели мне придется замянять в проге все String'и на WideString'и? или как тут быть? пожалуйста разъясни поподробнее... Please...
                                                      Сообщение отредактировано: BenQ -
                                                        Цитата BenQ @
                                                        Неужели мне придется замянять в проге все String'и на WideString'и? или как тут быть? пожалуйста разъясни поподробнее... Please...

                                                        Нет, String должен содержать те же данные, что и WideString, но отображать их не сможет, поскольку все использующиеся по умолчанию в Дельфи функции АПИ расчитаны на ASCII-кодировку. Поэтому придется использовать компоненты, поддерживающие юникод - TNT Controls, например. Тип string можно спокойно использовать, но в сочетании со специфическими функциями - то есть xxxW вместо xxxA. Всю работу должен сделать typecast.

                                                        Сайт TNT Controls http://www.tntware.com. И тут есть инфа http://www.lischke-online.de/.
                                                          s-mike, все дело в том что мне нужно решить данную проблемму без использования сторонних компонентов. Я пишу программу на чистом winAPI.
                                                          Цитата s-mike @
                                                          Тип string можно спокойно использовать, но в сочетании со специфическими функциями - то есть xxxW вместо xxxA

                                                          А вот этот момент если можно поподробней, а именно меня интересует каким образом производить выбор между тем какую функцию использовать - тоесть xxxA или xxxW(если можно то приведи какой нибудь простенький код, иллюстрирующий данную фичу).
                                                            s-mike, не покидай меня.
                                                              Цитата BenQ @
                                                              а именно меня интересует каким образом производить выбор между тем какую функцию использовать - тоесть xxxA или xxxW

                                                              Уже много раз объяснял, что xxxW. Если использовать WinApi и стандартные контролы, то они должны поддерживать юникод.
                                                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                              0 пользователей:


                                                              Рейтинг@Mail.ru
                                                              [ Script execution time: 0,0568 ]   [ 15 queries used ]   [ Generated: 18.09.25, 13:01 GMT ]