Итак, продолжаем начатое в первой части. 64-х разрядные версии Windows не разрешают смешивать 32-х и 64-х битный код в пределах одного процесса. В результате этого ограничения некоторые ветви реестра были также разделены на 32-х и 64-х разрядные. В частности, были разделены ключи, отвечающие за регистрацию COM компонент. Этот механизм называется перенаправлением реестра (registry redirection) и реализуется средствами Wow64. Механизм более или менее прозрачен для приложений в том смысле, что и 32-x и 64-х битные приложения используют одинаковые пути вида «HKEY_CLASSES_ROOT\Classes\{…}», но работают, в конечном итоге, с разными ключами.
Read more…
COM, Программирование, Windows, Wow64
Изначально, данный пост должен был называться «Регистрация COM объектов на 64-х разрядных версиях Windows» и речь должна было пойти про особенности 64-х разрядных версий Windows с точки зрения регистрации COM компонент. Однако пост получился слишком большим и его пришлось разбить на две части. Про особенности 64-х разрядных систем я расскажу во второй части.
Для начала немного теории. Взаимодействие клиента (приложения вызвавшего CoCreateInstance) и сервера (COM объекта) в общем случае можно изобразить с помощью вот такой схемы:
Read more…
COM, Программирование, Windows, Wow64
Как и обещал, выкладываю ссылку на инсталляцию:
Инсталляция не содержит практически никакого пользовательского интерфейса – зачем он там нужен? Деинсталляция – через Add or Remove Programs. Инсталляция создавалась, как не трудно догадаться, с помощью WiX.
Исходный код инсталляционного скрипта можно скачать вместе с обновленными исходниками.
COM, Программирование, PowerShell
Наконец-то дописал .NET обертку для IShellLink (см. серию постов начиная с Shortcuts, shell and COM apartments.). Теперь можно создавать и редактировать ярлыки прямо из PowerShell.
Вот ссылка на исходный код проекта. Немного позже, если дойдут руки, выложу ссылку на готовую инсталляцию.
Read more…
COM, Программирование, PowerShell
Хочу поделиться рецептом победы над коварным IShellLinkDataList (см. предыдущие посты COM marshalling. и Shortcuts, shell and COM apartments.)
Итак, исходная задача: вызвать метод локального интерфейса (интерфейса, помеченного атрибутом [local]) удалённо.
Read more…
COM, Программирование
Все-таки, наверное, Европейский Суд не зря судит Microsoft за недостаточно хорошую документацию. Пытаясь разобраться как, все таки, написать proxy для интерфейса IShellLinkDataList (см. предыдущие посты: COM Marshalling. и Shortcuts, shell and COM apartments.), перечитал уйму документации, пока не нашел толкового описания того, что я хочу сделать на сайте Dr. Dobb’s. Если попытаться описать весь процесс “метаний”, то выглядело это так:
Read more…
COM, Программирование, Microsoft
Продолжение истории про Shortcuts, shell and COM apartments.
Разбираясь с написанием proxy для интерфейса IShellLinkDataList, нашел несколько дельных статей в MSDN. Например, Standard Marshaling Architecture толково описывает как собственно происходит marshalling во время вызова и какие объекты задействованы при этом. В двух словах всё происходит так:
Read more…
COM, Программирование
Recent Comments