Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Различие функций API, Функции с "A" и "W" на конце 
V
    Опции темы
anwe
Дата 12.9.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 4
Всего: 23



При работе с программой WinSight, что в борландовском пакете, некоторые сообщения выдаются с буквой A или W на конце, как то TVM_GETITEMA, TVM_GETITEMW.
В борландовском же SDK есть лишь TVM_GETITEM.
Чем они отличаются между собой и от TVM_GETITEM? По-моему суть их одинакова...
PM MAIL   Вверх
dumb
Дата 12.9.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



A - ansi-строки
W - Unicode

а компилятор подставляет нужное в зависимости от опций проекта. глянь в хидеры:
Код

#ifdef UNICODE
#define  TVM_GETITEM            TVM_GETITEMW
#else
#define  TVM_GETITEM            TVM_GETITEMA
#endif


Добавлено @ 23:19 
ой. дельфи ж... smile но суть не меняется...
PM MAIL   Вверх
Snowy
Дата 13.9.2006, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Для дельфи функция без окончания всегда равна A.
Хотя можно создать свой модуль, где будут использоваться W аналоги, или прямо использовать функции с W.
А разница - да.
A - функции, работающие с ANSI строками, W - с юникодными строками.

Добавлено @ 08:43 
Да. Добавлю ещё, что разная внутренняя реализация в виндах NT и 9х.
В 9х виндах W-функции конвертят строку в анси и вызывают A-функции.
В NT всё наоборот - A-функции конвертят строку в юникод и вызывают W-функции.
PM MAIL   Вверх
anwe
Дата 13.9.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 4
Всего: 23



Спасибо!
Значит сама суть их одинакова. Но...
Почему же другие сообщения (которых большая часть) выдаются без этих A и W? Это связано с какими-то определенными контролами (окнами)?
PM MAIL   Вверх
anwe
Дата 13.9.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 4
Всего: 23



Похоже, все-таки, их суть не так уж одинакова. Пытаясь отловить сообщение TVM_GETITEM (в ХР), ничего не получается. Если же написать TVM_GETITEMW, то срабатывает, TVM_GETITEMA - выдает ошибку при компиляции.
Значит
Цитата

В NT всё наоборот - A-функции конвертят строку в юникод и вызывают W-функции.
не верно.
PM MAIL   Вверх
dumb
Дата 13.9.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



для начала, это не функция, а сообщение. а ошибки компиляции не зависят от особенностей работы ОС.
PM MAIL   Вверх
Romikgy
Дата 13.9.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Код

#define TVM_GETITEMA    (TV_FIRST+12)
#define TVM_GETITEMW    (TV_FIRST+62)
#ifdef UNICODE
#define TVM_GETITEM TVM_GETITEMW
#else /* UNICODE */
#define TVM_GETITEM TVM_GETITEMA
#endif

Есть еще вопросы?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Yanis
Дата 14.9.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



anwe
Сам понял, что написал? Как раз твои рассуждения и подтверждают, что все версии Windows начиная с NT ожидают в качестве параметров своих функций wide строки. И вообще вся внутренняя работа этих платформ так или иначе манипулирующая строками использует именно wide строки. Неверить словам Snowy я невижу причин, да и в книжках умных написано, что это так. У того же Рихтера например. Советую почитать.

Добавлено @ 09:26 
Цитата(anwe @  13.9.2006,  19:43 Найти цитируемый пост)
Почему же другие сообщения (которых большая часть) выдаются без этих A и W? Это связано с какими-то определенными контролами (окнами)?

Если ты имеешь ввиду функции такие как ChangeDisplaySettings, MessageBox и т.д. которые так или иначе используют строки, то вызывая эти функции ты всёравно ссылаешься на их ANSI версии. Потому как объявлены они так:
Код
function MessageBox; external user32 name 'MessageBoxA';
function ChangeDisplaySettings; external user32 name 'ChangeDisplaySettingsA';

Внимательно посмотрев можно заметить букву A на конце.

Если же ты имеешь ввиду под "большей частью" функции, например такие как DestroyCaret, DestroyCursor, EnumThreadWindows и т.д., то они конечно существуют в одном варианте ибо строк не касаются.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
anwe
Дата 14.9.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 4
Всего: 23



Цитата

Если же ты имеешь ввиду под "большей частью" функции, например такие как DestroyCaret, DestroyCursor, EnumThreadWindows и т.д., то они конечно существуют в одном варианте ибо строк не касаются.

Ответ получен: они не касаются срок.
Спасибо.
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.