Mam 32-bitową aplikację, która korzysta z Java Accessibility (WindowsAccessBridge-32.dll, przez Java Access Bridge) i działa doskonale na 32-bitowej maszynie , ale kończy się niepowodzeniem na maszynie x64.32-bitowa dostępność języka Java na 64-bitowym komputerze
wierzę, że śledzone ją w dół do jednego z pierwszych zaproszeń po Windows_run:
getAccessibleContextFromHWND(hwnd, out vmId, out context)
zdefiniowane następująco:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static bool getAccessibleContextFromHWND(IntPtr hwnd, out Int32 vmID, out IntPtr acParent);
toll działa poprawnie w systemie 32-bitowym, wracając Prawda, zapełniając zarówno vmId (z pewną 5-cyfrową wartością, która), jak i kontekstem - podczas gdy w systemie 64-bitowym zwraca True, wypełnia "kontekst", ale zwraca "0" dla vmId.
Jeśli założymy, że 0 jest ważny (choć jest to przypadkowy 5-cyfrowy numer przypominający wskaźnik na systemie 32-bitowym), następne wywołanie nadal kończy się niepowodzeniem:
AccessibleContextInfo aci = new API.AccessibleContextInfo();
if (!getAccessibleContextInfo(vmId, context, ref aci))
throw new Exception();
gdzie:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static bool getAccessibleContextInfo(Int32 vmID, IntPtr ac, ref AccessibleContextInfo info);
(Pomijam strukturę AccessibleContextInfo dla zwięzłości, ale mogę ją podać w razie potrzeby).
Wiem, że biblioteki działają, ponieważ zarówno JavaMonkey, jak i JavaFerret działają poprawnie. Ponadto wywołanie funkcji isJavaWindow działa, zwracając "true" lub "false" w zależności od potrzeb i łączę się z poprawną biblioteką DLL (WindowsAccessBridge-32).
Czy ktoś może sugerować, co może być nie tak?
Każdy AccessibleContext IntPtr muszą być zastąpione przez długi, włączając, lecz nie ograniczając się do getAccessibleContextFromHWND, getAccessibleParentFromContext, getAccessibleChildFromContext, getAccessibleTextInfo. .. – HelloSam