Windows API для VISTA, 7 и выше - PullRequest
8 голосов
/ 19 июля 2009

Есть ли принципиальные отличия в WinAPI / Win32? Требуются ли какие-либо дополнительные знания, чтобы воспользоваться новыми возможностями ОС?

Есть ли какие-нибудь подводные камни, в которые может попасть кто-то, кто кодировал приложения Win32 в прошлом?

Я не говорю о Silverlight, это совсем другой шарик воска. (У меня нет VS, который поддерживает это на работе.)

Edit: Пока у Дрю довольно хороший ответ, но что важно знать программисту? то есть что должно быть в приложении к книге Чарльза Петцольда? (Теоретически)

Ответы [ 5 ]

14 голосов
/ 19 июля 2009

Есть, конечно, много новых API, о которых вы должны знать, чтобы убедиться, что у вас есть необходимые инструменты.Помимо этого, есть некоторые изменения, на которые следует обратить внимание.

Философские изменения
Большие части старых Win32 API, ориентированные на API в стиле C, где были переданы дескрипторы.В настоящее время многие из новых разрабатываемых API-интерфейсов основаны на COM, поэтому целесообразно использовать COM и ATL.

Возможно, вы также захотите принять к сведению новый стиль API, если вы пишете свой собственныйбиблиотеки, которые немного более последовательны и избегают таких вещей, как венгерская нотация.

Replacements
Как правило, не думайте, что методы, которые вы знали около 10 лет назад, все еще находятся в состояниииз-арта;они все еще существуют, поэтому вам не обязательно говорить, что вы делаете это неправильно.Проверьте MSDN, чтобы узнать, подходит ли вам что-то лучшее, и используйте последний SDK, чтобы получить предупреждения об устаревании для некоторых функций.В особенности убедитесь, что используемые вами строковые функции безопасны.

В частности, одним «заменяющим» API является Direct 2d, который представляет собой API-интерфейс в стиле DirectX для пользовательских интерфейсов.Если вы пишете графический код для Windows 7, вы должны рассмотреть Direct2d поверх GDI, у которого есть модель программирования, которая совместима, но сильно отличается от GDI.Direct 2d может быть перенесен обратно в Vista.

Кроме того, вместо использования меню в стиле win32 рассмотрите возможность использования ленты, которая будет доступна для Vista, а также для Win7.При использовании библиотеки общих элементов управления убедитесь, что используется v6, а не версия по умолчанию v5.

Наконец, убедитесь, что вы не вызываете ненужных вещей, требующих прав администратора, поскольку это вызовет UAC.

Все, что я могу думать сейчас.

3 голосов
/ 19 июля 2009

Для каждого есть новые API.

Имеются дополнительные знания, хотя это может и не потребоваться, но вы должны быть знакомы с разработкой 64-битных и многопоточных приложений. Конструкции более высокого уровня, такие как Direct2D, .NET и т. Д. И т. Д., - это то, что требует корректировки знаний, а не обязательно API более низкого уровня.

2 голосов
/ 12 августа 2009

У вас есть выбор: традиционный C / C ++ или использовать более новые языки .Net Framework (C # / VB.net / Python.net и другие). Для последнего знание структуры является более важным, чем реализация. Вы изолированы (в общем) от указателей, потоков, буферов и управления памятью, а также от нескольких различий в синтаксисе, когда вы знаете, что среда переносима между языками (т. Е. Вы могли бы легко освоить программирование на VB.net, если вы C # парень, так как большинство ваших приложений будут называть части фреймворка). Вы можете создать класс в C #, использовать его в программе VB.net и ссылаться на тот же класс, например, из командлета Powershell.

Интерфейсы C старого стиля все еще для Win32, но если у вас нет особой необходимости их использовать (устаревший код, Direct X, драйверы устройств, например), я бы посмотрел на более новые вещи. Что касается таких вещей, как WPF, то даже через неуправляемый код не существует прямого маршрута - вам нужно перепрыгивать через все виды уродливых взаимодействий.

1 голос
/ 17 декабря 2009

Уровни целостности - это тоже хорошая вещь для изучения. В зависимости от характера вашего приложения, если оно пытается что-то сделать с участием других процессов, работающих в ОС, важно знать об этом. Эта технология предотвращает взаимодействие процессов с более низким уровнем целостности с процессами, выполняющимися с более высоким уровнем целостности. Это включает в себя обмен сообщениями, хуки, внедрение DLL, дескрипторы открытия и многие другие методы.

1 голос
/ 19 июля 2009

Ничего особенного. Старый материал работает так же, как и раньше. Есть несколько новых API, но ничего страшного (и следуя старым соглашениям Win32). Так что все, что вы знаете из Vista, все еще верно для Win7.

Теперь есть несколько новых рекомендаций, касающихся пользовательского опыта (сенсорный экран, библиотеки (пользовательский опыт, а не программистский)), но стиль API тот же.

...