Tengo una aplicación de 32 bits que hace uso de Java Accessibility (WindowsAccessBridge-32.dll, a través del puente de acceso Java), y funciona perfectamente en una máquina de 32 bits , pero falla en una máquina x64.Java Accesibilidad de 32 bits en una máquina de 64 bits
Creo que he rastreado hasta una de las primeras llamadas después Windows_run:
getAccessibleContextFromHWND(hwnd, out vmId, out context)
definido de la siguiente manera:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static bool getAccessibleContextFromHWND(IntPtr hwnd, out Int32 vmID, out IntPtr acParent);
Esta llamada funciona bien en el sistema de 32 bits, volviendo Es cierto que rellena vmId (con un valor de 5 dígitos, que) y el contexto, mientras que en el sistema de 64 bits, devuelve True, rellena 'context', pero devuelve '0' para vmId.
Si asumo que 0 es válida (aunque es un número de 5 dígitos al azar parecido a un puntero en el sistema de 32 bits), la siguiente llamada sigue fallando:
AccessibleContextInfo aci = new API.AccessibleContextInfo();
if (!getAccessibleContextInfo(vmId, context, ref aci))
throw new Exception();
donde:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static bool getAccessibleContextInfo(Int32 vmID, IntPtr ac, ref AccessibleContextInfo info);
(Estoy omitiendo la estructura AccessibleContextInfo para abreviar, pero puedo proporcionarla si es necesario).
Sé que las bibliotecas funcionan, porque tanto JavaMonkey como JavaFerret funcionan correctamente. Además, la llamada a isJavaWindow funciona, devolviendo 'verdadero' o 'falso' según corresponda, y estoy enlazando con la DLL correcta (WindowsAccessBridge-32).
¿Alguien puede sugerir qué puede estar mal aquí?
Every AccessibleContext IntPtr debe reemplazarse por long, incluidos, entre otros, getAccessibleContextFromHWND, getAccessibleParentFromContext, getAccessibleChildFromContext, getAccessibleTextInfo. .. – HelloSam