32bitová a 64bitová interoperabilita
Aplikace technologie usnadnění musí komunikovat přes hranice procesů, aby získaly informace o uživatelském rozhraní od serverů Microsoft Active Accessibility a poskytovatelů služby Microsoft UI Automation. Toto téma popisuje hlavní problémy s komunikací mezi procesy, které je potřeba mít na paměti při vývoji aplikací pro usnadnění přístupu systému Windows.
Když aplikace používají rozhraní API služby Windows Automation, komponenty Microsoft Active Accessibility a UI Automation za běhu automaticky zpracovávají všechny problémy a složitosti spojené s prováděním komunikace mezi procesy(IPC), včetně problémů s interoperabilitou, které se týkají, když je jeden proces 32 bitů a druhý je 64 bitů. Společnost Microsoft uznává, že existují situace, kdy může aplikace technologie usnadnění potřebovat místo rozhraní API služby Windows Automation ke komunikaci se serverem Microsoft Active Accessibility nebo poskytovatelem automatizace uživatelského rozhraní nějakou formu IPC. Při těchto příležitostech společnost Microsoft doporučuje používat zprávy modelu DCOM nebo Windows (ty s hodnotami menšími než WM_USER) ke komunikaci s jinými procesy. Stejně jako rozhraní API služby Windows Automation, zprávy modelu DCOM a Windows automaticky zpracovávají všechny problémy IPC za vás, včetně 32bitové až 64bitové interoperability.
Pokud rozhraní API služby Windows Automation, DCOM a zprávy systému Windows nejsou volbou, mějte při implementaci zvolené metody IPC na paměti následující problémy:
- Sdílená paměť – Při použití sdílené paměti mějte na paměti, že struktura v 32bitovém procesu může mít jinou velikost a rozložení než stejná struktura v 64bitovém procesu. To platí zejména pro struktury, které obsahují ukazatele nebo úchyty.
- Zkrácení ukazatele – I když 32bitová aplikace může použít datový typ LONGLONG k uložení 64bitové hodnoty, existují instance, ve kterých neexistuje žádný prvek rozhraní API systému Windows, který by umožnil 32bitové aplikaci přijímat 64bitovou hodnotu z 64bitového procesu nebo odesílat 64bitovou hodnotu do 64bitového procesu. Například funkce GetWindowLongPtr a SendMessage zkrátí všechny hodnoty ukazatele, takže 32bitová aplikace bude mít nepoužitou hodnotu.
- Popisovače – protože popisovače jádra 32 a user32 jsou v 32bitových i 64bitových procesech významné pouze 32bitové a 64bitové, lze je přenášet mezi procesy bez problému. Některé položky, které Systém Windows definuje jako úchyty, jsou ale opravdu zabalené ukazatele (například HTREEITEM). Tyto popisovače budou zkráceny, pokud se předávají z 64bitového procesu do 32bitového procesu.
- funkce háku WinEvent – Pokud chcete zaregistrovat funkci háku v kontextu s 32bitovým procesem serveru, musí se funkce hooku nacházet v 32bitové knihovně DLL. Podobně, pokud chcete zaregistrovat funkci háku v kontextu s 64bitovým procesem serveru, musí se funkce hooku nacházet v 64bitové knihovně DLL. Pokud se aplikace technologie usnadnění pokusí zaregistrovat funkci háku v kontextu u serveru, který má jinou bitovou hloubku, události se do funkce háku doručí, ale doručí se mimo kontext. Další informace naleznete v tématu WinEvents a In-Context a Out-of-Context Hook Functions.
Další informace o 32bitové a 64bitové interoperabilitě naleznete v tématu Spolupráce procesů.
Související témata