Я портирую настольное приложение, которое поддерживает Microsoft Accessibility, с 32-разрядных на 64-разрядные.Это приложение имеет множество пользовательских элементов управления.При вызове NotifyWinEvent()
:
/*Pseudocode*/
MYSTRUCT *ptr;
allocate and assign data to ptr;
Call NotifyWinEvent(EVENT_OBJECT_FOCUS, hwnd, OBJID_CLIENT, (long)ptr).
Код извлекает указатель в реализованном методе IAccessible
и использует его:
/* pseudocode */
TDMETHODIMP CMSAAMyProxy::get_accRole( VARIANT varChild, VARIANT *pvarRole )
{
if (VT_I4 == varChild.vt)
{
MYSTRUCT *ptr = (MYSTRUCT *)varChild.lVal;
/* Use the ptr here */
}
}
Такой код записан во многих файлах.Хотя приведенный выше код хорошо работает на 32-разрядной версии, он падает на 64-разрядной из-за усечения указателя.
Есть ли какой-либо альтернативный API, который я могу использовать для решения этой проблемы?