CreateFile, CreateFileA, CreateFileW
    , В чем разница - вопросы совместимости
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
  | Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) | 
    CreateFile, CreateFileA, CreateFileW
    , В чем разница - вопросы совместимости
  | 
         
         
         
          
           Сообщ.
           #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 @  хотелось бы знать как там названы ключи в реестре, тоесть иерархия с названиями параметров такая же?(к примеру я допустим знаю где хранится определенный системный ключ в реестре(на рускоязычной системе), дак вот путь к этому ключу допустим в итальянской системе будет таким же???). Кто может объяснтить этот момент?  |