/*
 * Copyright (c) 2024. The RigelA open source project team and
 * its contributors reserve all rights.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and limitations under the License.
 * Modified by igaisin 2025
 */

#[macro_export]
macro_rules! jab {
    // Макрос для вызова функции Windows_run
    ($module:expr,windows_run) => {
        call_proc!($module, Windows_run, extern "system" fn() -> BOOL,)
    };
    // Макрос для вызова функции isJavaWindow
    ($module:expr,is_java_window,$h_wnd:expr) => {
        call_proc!(
            $module,
            isJavaWindow,
            extern "system" fn(HWND) -> BOOL,
            $h_wnd
        )
    };
    // Макрос для вызова функции getAccessibleContextFromHWND
    ($module:expr,get_accessible_context_from_hwnd,$target:expr,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getAccessibleContextFromHWND,
            extern "system" fn(HWND, *mut i32, *mut AccessibleContext) -> BOOL,
            $target,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции getHWNDFromAccessibleContext
    ($module:expr,get_hwnd__from_accessible_context,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getHWNDFromAccessibleContext,
            extern "system" fn(i32, AccessibleContext) -> HWND,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции releaseJavaObject
    ($module:expr,release_java_object,$vm_id:expr,$object:expr) => {
        call_proc!(
            $module,
            releaseJavaObject,
            extern "system" fn(i32, JavaObject),
            $vm_id,
            $object
        )
    };
    // Макрос для вызова функции getVersionInfo
    ($module:expr,get_version_info,$vm_id:expr,$info:expr) => {
        call_proc!(
            $module,
            getVersionInfo,
            extern "system" fn(i32, *mut AccessBridgeVersionInfo) -> BOOL,
            $vm_id,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleContextAt
    ($module:expr,get_accessible_context_at,$vm_id:expr,$parent:expr,$x:expr,$y:expr,$ac:expr) => {
        call_proc!(
            $module,
            getAccessibleContextAt,
            extern "system" fn(i32, AccessibleContext, JInt, JInt, *mut AccessibleContext) -> BOOL,
            $vm_id,
            $parent,
            $x,
            $y,
            $ac
        )
    };
    // Макрос для вызова функции getAccessibleContextWithFocus
    ($module:expr,get_accessible_context_with_focus,$window:expr,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getAccessibleContextWithFocus,
            extern "system" fn(HWND, *mut i32, *mut AccessibleContext) -> BOOL,
            $window,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции getAccessibleContextInfo
    ($module:expr,get_accessible_context_info,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleContextInfo,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleContextInfo) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleChildFromContext
    ($module:expr,get_accessible_child_from_context,$vm_id:expr,$ac:expr,$index:expr) => {
        call_proc!(
            $module,
            getAccessibleChildFromContext,
            extern "system" fn(i32, AccessibleContext, JInt) -> AccessibleContext,
            $vm_id,
            $ac,
            $index
        )
    };
    // Макрос для вызова функции getAccessibleParentFromContext
    ($module:expr,get_accessible_parent_from_context,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getAccessibleParentFromContext,
            extern "system" fn(i32, AccessibleContext) -> AccessibleContext,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции isSameObject
    ($module:expr,is_same_object,$vm_id:expr,$obj1:expr,$obj2:expr) => {
        call_proc!(
            $module,
            isSameObject,
            extern "system" fn(i32, JObject64, JObject64) -> BOOL,
            $vm_id,
            $obj1,
            $obj2
        )
    };
    // Макрос для вызова функции getParentWithRole
    ($module:expr,get_parent_with_role,$vm_id:expr,$ac:expr,$role:expr) => {
        call_proc!(
            $module,
            getParentWithRole,
            extern "system" fn(i32, AccessibleContext, *const u16) -> AccessibleContext,
            $vm_id,
            $ac,
            $role
        )
    };
    // Макрос для вызова функции getParentWithRoleElseRoot
    ($module:expr,get_parent_with_role_else_root,$vm_id:expr,$ac:expr,$role:expr) => {
        call_proc!(
            $module,
            getParentWithRoleElseRoot,
            extern "system" fn(i32, AccessibleContext, *const u16) -> AccessibleContext,
            $vm_id,
            $ac,
            $role
        )
    };
    // Макрос для вызова функции getTopLevelObject
    ($module:expr,get_top_level_object,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getTopLevelObject,
            extern "system" fn(i32, AccessibleContext) -> AccessibleContext,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции getObjectDepth
    ($module:expr,get_object_depth,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getObjectDepth,
            extern "system" fn(i32, AccessibleContext) -> i32,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции getActiveDescendent
    ($module:expr,get_active_descendent,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getActiveDescendent,
            extern "system" fn(i32, AccessibleContext) -> AccessibleContext,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции requestFocus
    ($module:expr,request_focus,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            requestFocus,
            extern "system" fn(i32, AccessibleContext) -> BOOL,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции getVisibleChildrenCount
    ($module:expr,get_visible_children_count,$vm_id:expr,$ac:expr) => {
        call_proc!(
            $module,
            getVisibleChildrenCount,
            extern "system" fn(i32, AccessibleContext) -> i32,
            $vm_id,
            $ac
        )
    };
    // Макрос для вызова функции getVisibleChildren
    ($module:expr,get_visible_children,$vm_id:expr,$ac:expr,$start:expr,$info:expr) => {
        call_proc!(
            $module,
            getVisibleChildren,
            extern "system" fn(i32, AccessibleContext, i32, *mut VisibleChildrenInfo) -> BOOL,
            $vm_id,
            $ac,
            $start,
            $info
        )
    };
    // Макрос для вызова функции getEventsWaiting
    ($module:expr,get_events_waiting) => {
        call_proc!($module, getEventsWaiting, extern "system" fn() -> i32,)
    };
    // Макрос для вызова функции getAccessibleActions
    ($module:expr,get_accessible_actions,$vm_id:expr,$ac:expr,$actions:expr) => {
        call_proc!(
            $module,
            getAccessibleActions,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleActions) -> BOOL,
            $vm_id,
            $ac,
            $actions
        )
    };
    // Макрос для вызова функции getCaretLocation
    ($module:expr,get_caret_location,$vm_id:expr,$ac:expr,$info:expr,$index:expr) => {
        call_proc!(
            $module,
            getCaretLocation,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleTextRectInfo, JInt) -> BOOL,
            $vm_id,
            $ac,
            $info,
            $index
        )
    };
    // Макрос для вызова функции setCaretPosition
    ($module:expr,set_caret_position,$vm_id:expr,$ac:expr,$position:expr) => {
        call_proc!(
            $module,
            setCaretPosition,
            extern "system" fn(i32, AccessibleContext, i32) -> BOOL,
            $vm_id,
            $ac,
            $position
        )
    };
    // Макрос для вызова функции getTextAttributesInRange
    ($module:expr,get_text_attributes_in_range,$vm_id:expr,$ac:expr,$start_index:expr,$end_index:expr,$info:expr,$len:expr) => {
        call_proc!(
            $module,
            getTextAttributesInRange,
            extern "system" fn(
                i32,
                AccessibleContext,
                i32,
                i32,
                *mut AccessibleTextAttributesInfo,
                *mut i16,
            ) -> BOOL,
            $vm_id,
            $ac,
            $start_index,
            $end_index,
            $info,
            $len
        )
    };
    // Макрос для вызова функции getAccessibleRelationSet
    ($module:expr,get_accessible_relation_set,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleRelationSet,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleRelationSetInfo) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleKeyBindings
    ($module:expr,get_accessible_key_bindings,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleKeyBindings,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleKeyBindings) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleIcons
    ($module:expr,get_accessible_icons,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleIcons,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleIcons) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleTableRowHeader
    ($module:expr,get_accessible_table_row_header,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleTableRowHeader,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleTableInfo) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleTableColumnHeader
    ($module:expr,get_accessible_table_column_header,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleTableColumnHeader,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleTableInfo) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleTableColumnDescription
    ($module:expr,get_accessible_table_column_description,$vm_id:expr,$ac:expr,$column:expr) => {
        call_proc!(
            $module,
            getAccessibleTableColumnDescription,
            extern "system" fn(i32, AccessibleContext, JInt) -> AccessibleContext,
            $vm_id,
            $ac,
            $column
        )
    };
    // Макрос для вызова функции getAccessibleTableRowDescription
    ($module:expr,get_accessible_table_row_description,$vm_id:expr,$ac:expr,$row:expr) => {
        call_proc!(
            $module,
            getAccessibleTableRowDescription,
            extern "system" fn(i32, AccessibleContext, JInt) -> AccessibleContext,
            $vm_id,
            $ac,
            $row
        )
    };
    // Макрос для вызова функции selectTextRange
    ($module:expr,select_text_range,$vm_id:expr,$ac:expr,$start_index:expr,$end_index:expr) => {
        call_proc!(
            $module,
            selectTextRange,
            extern "system" fn(i32, AccessibleContext, JInt, JInt) -> BOOL,
            $vm_id,
            $ac,
            $start_index,
            $end_index
        )
    };
    // Макрос для вызова функции getAccessibleTableInfo
    ($module:expr,get_accessible_table_info,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleTableInfo,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleTableInfo) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getVirtualAccessibleName
    ($module:expr,get_virtual_accessible_name,$vm_id:expr,$ac:expr,$name:expr,$len:expr) => {
        call_proc!(
            $module,
            getVirtualAccessibleName,
            extern "system" fn(i32, AccessibleContext, *mut u16, i32) -> BOOL,
            $vm_id,
            $ac,
            $name,
            $len
        )
    };
    // Макрос для вызова функции getAccessibleHypertext
    ($module:expr,get_accessible_hypertext,$vm_id:expr,$ac:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleHypertext,
            extern "system" fn(i32, AccessibleContext, *mut AccessibleHypertextInfo) -> BOOL,
            $vm_id,
            $ac,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleHypertextExt
    ($module:expr,get_accessible_hypertext_ext,$vm_id:expr,$ac:expr,$start_index:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleHypertextExt,
            extern "system" fn(i32, AccessibleContext, JInt, *mut AccessibleHypertextInfo) -> BOOL,
            $vm_id,
            $ac,
            $start_index,
            $info
        )
    };
    // Макрос для вызова функции doAccessibleActions
    ($module:expr,do_accessible_actions,$vm_id:expr,$ac:expr,$actions_to_do:expr,$failure:expr) => {
        call_proc!(
            $module,
            doAccessibleActions,
            extern "system" fn(
                i32,
                AccessibleContext,
                *const AccessibleActionsToDo,
                *mut JInt,
            ) -> BOOL,
            $vm_id,
            $ac,
            $actions_to_do,
            $failure
        )
    };
    // Макрос для вызова функции setTextContents
    ($module:expr,set_text_contents,$vm_id:expr,$ac:expr,$text:expr) => {
        call_proc!(
            $module,
            setTextContents,
            extern "system" fn(i32, AccessibleContext, *const u16) -> BOOL,
            $vm_id,
            $ac,
            $text
        )
    };
    // Макрос для вызова функции setCaretUpdateFP
    ($module:expr,set_caret_update_fp,$cb:expr) => {
        call_proc!(
            $module,
            setCaretUpdateFP,
            extern "system" fn(AccessBridgeCaretUpdateFp),
            $cb
        )
    };
    // Макрос для вызова функции setFocusGainedFP
    ($module:expr,set_focus_gained_fp,$cb:expr) => {
        call_proc!(
            $module,
            setFocusGainedFP,
            extern "system" fn(AccessBridgeFocusGainedFp),
            $cb
        )
    };
    // Макрос для вызова функции setFocusLostFP
    ($module:expr,set_focus_lost_fp,$cb:expr) => {
        call_proc!(
            $module,
            setFocusLostFP,
            extern "system" fn(AccessBridgeFocusLostFp),
            $cb
        )
    };
    // Макрос для вызова функции setJavaShutdownFP
    ($module:expr,set_java_shutdown_fp,$cb:expr) => {
        call_proc!(
            $module,
            setJavaShutdownFP,
            extern "system" fn(AccessBridgeJavaShutdownFp),
            $cb
        )
    };
    // Макрос для вызова функции setMenuCanceledFP
    ($module:expr,set_menu_canceled_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMenuCanceledFP,
            extern "system" fn(AccessBridgeMenuCanceledFp),
            $cb
        )
    };
    // Макрос для вызова функции setMenuDeselectedFP
    ($module:expr,set_menu_deselected_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMenuDeselectedFP,
            extern "system" fn(AccessBridgeMenuDeselectedFp),
            $cb
        )
    };
    // Макрос для вызова функции setMenuSelectedFP
    ($module:expr,set_menu_selected_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMenuSelectedFP,
            extern "system" fn(AccessBridgeMenuSelectedFp),
            $cb
        )
    };
    // Макрос для вызова функции setMouseClickedFP
    ($module:expr,set_mouse_clicked_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMouseClickedFP,
            extern "system" fn(AccessBridgeMouseClickedFp),
            $cb
        )
    };
    // Макрос для вызова функции setMouseEnteredFP
    ($module:expr,set_mouse_entered_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMouseEnteredFP,
            extern "system" fn(AccessBridgeMouseEnteredFp),
            $cb
        )
    };
    // Макрос для вызова функции setMouseExitedFP
    ($module:expr,set_mouse_exited_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMouseExitedFP,
            extern "system" fn(AccessBridgeMouseExitedFp),
            $cb
        )
    };
    // Макрос для вызова функции setMousePressedFP
    ($module:expr,set_mouse_pressed_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMousePressedFP,
            extern "system" fn(AccessBridgeMousePressedFp),
            $cb
        )
    };
    // Макрос для вызова функции setMouseReleasedFP
    ($module:expr,set_mouse_released_fp,$cb:expr) => {
        call_proc!(
            $module,
            setMouseReleasedFP,
            extern "system" fn(AccessBridgeMouseReleasedFp),
            $cb
        )
    };
    // Макрос для вызова функции setPopupMenuCanceledFP
    ($module:expr,set_popup_menu_canceled_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPopupMenuCanceledFP,
            extern "system" fn(AccessBridgePopupMenuCanceledFp),
            $cb
        )
    };
    // Макрос для вызова функции setPopupMenuWillBecomeInvisibleFP
    ($module:expr,set_popup_menu_will_become_invisible_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPopupMenuWillBecomeInvisibleFP,
            extern "system" fn(AccessBridgePopupMenuWillBecomeInvisibleFp),
            $cb
        )
    };
    // Макрос для вызова функции setPopupMenuWillBecomeVisibleFP
    ($module:expr,set_popup_menu_will_become_visible_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPopupMenuWillBecomeVisibleFP,
            extern "system" fn(AccessBridgePopupMenuWillBecomeVisibleFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyActiveDescendentChangeFP
    ($module:expr,set_property_active_descendent_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyActiveDescendentChangeFP,
            extern "system" fn(AccessBridgePropertyActiveDescendentChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyCaretChangeFP
    ($module:expr,set_property_caret_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyCaretChangeFP,
            extern "system" fn(AccessBridgePropertyCaretChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyChangeFP
    ($module:expr,set_property_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyChangeFP,
            extern "system" fn(AccessBridgePropertyChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyChildChangeFP
    ($module:expr,set_property_child_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyChildChangeFP,
            extern "system" fn(AccessBridgePropertyChildChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyDescriptionChangeFP
    ($module:expr,set_property_description_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyDescriptionChangeFP,
            extern "system" fn(AccessBridgePropertyDescriptionChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyNameChangeFP
    ($module:expr,set_property_name_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyNameChangeFP,
            extern "system" fn(AccessBridgePropertyNameChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertySelectionChangeFP
    ($module:expr,set_property_selection_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertySelectionChangeFP,
            extern "system" fn(AccessBridgePropertySelectionChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyStateChangeFP
    ($module:expr,set_property_state_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyStateChangeFP,
            extern "system" fn(AccessBridgePropertyStateChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyTableModelChangeFP
    ($module:expr,set_property_table_model_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyTableModelChangeFP,
            extern "system" fn(AccessBridgePropertyTableModelChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyTextChangeFP
    ($module:expr,set_property_text_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyTextChangeFP,
            extern "system" fn(AccessBridgePropertyTextChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyValueChangeFP
    ($module:expr,set_property_value_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyValueChangeFP,
            extern "system" fn(AccessBridgePropertyValueChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции setPropertyVisibleDataChangeFP
    ($module:expr,set_property_visible_data_change_fp,$cb:expr) => {
        call_proc!(
            $module,
            setPropertyVisibleDataChangeFP,
            extern "system" fn(AccessBridgePropertyVisibleDataChangeFp),
            $cb
        )
    };
    // Макрос для вызова функции activateAccessibleHyperlink
    ($module:expr,activate_accessible_hyperlink,$vm_id:expr,$ac:expr,$link:expr) => {
        call_proc!(
            $module,
            activateAccessibleHyperlink,
            extern "system" fn(i32, AccessibleContext, AccessibleHyperlink) -> BOOL,
            $vm_id,
            $ac,
            $link
        )
    };
    // Макрос для вызова функции addAccessibleSelectionFromContext
    ($module:expr,add_accessible_selection_from_context,$vm_id:expr,$as:expr,$index:expr) => {
        call_proc!(
            $module,
            addAccessibleSelectionFromContext,
            extern "system" fn(i32, AccessibleSelection, i32),
            $vm_id,
            $as,
            $index
        )
    };
    // Макрос для вызова функции removeAccessibleSelectionFromContext
    ($module:expr,remove_accessible_selection_from_context,$vm_id:expr,$as:expr,$index:expr) => {
        call_proc!(
            $module,
            removeAccessibleSelectionFromContext,
            extern "system" fn(i32, AccessibleSelection, i32),
            $vm_id,
            $as,
            $index
        )
    };
    // Макрос для вызова функции clearAccessibleSelectionFromContext
    ($module:expr,clear_accessible_selection_from_context,$vm_id:expr,$as:expr) => {
        call_proc!(
            $module,
            clearAccessibleSelectionFromContext,
            extern "system" fn(i32, AccessibleSelection),
            $vm_id,
            $as
        )
    };
    // Макрос для вызова функции selectAllAccessibleSelectionFromContext
    ($module:expr,select_all_accessible_selection_from_context,$vm_id:expr,$as:expr) => {
        call_proc!(
            $module,
            selectAllAccessibleSelectionFromContext,
            extern "system" fn(i32, AccessibleSelection),
            $vm_id,
            $as
        )
    };
    // Макрос для вызова функции getAccessibleHyperlink
    ($module:expr,get_accessible_hyperlink,$vm_id:expr,$ah:expr,$index:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleHyperlink,
            extern "system" fn(i32, AccessibleHypertext, JInt, *mut AccessibleHypertextInfo) -> BOOL,
            $vm_id,
            $ah,
            $index,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleHyperlinkCount
    ($module:expr,get_accessible_hyperlink_count,$vm_id:expr,$ah:expr) => {
        call_proc!(
            $module,
            getAccessibleHyperlinkCount,
            extern "system" fn(i32, AccessibleHypertext) -> JInt,
            $vm_id,
            $ah
        )
    };
    // Макрос для вызова функции getAccessibleHypertextLinkIndex
    ($module:expr,get_accessible_hypertext_link_index,$vm_id:expr,$ah:expr,$index:expr) => {
        call_proc!(
            $module,
            getAccessibleHypertextLinkIndex,
            extern "system" fn(i32, AccessibleHypertext, JInt) -> JInt,
            $vm_id,
            $ah,
            $index
        )
    };
    // Макрос для вызова функции getAccessibleSelectionCountFromContext
    ($module:expr,get_accessible_selection_count_from_context,$vm_id:expr,$as:expr) => {
        call_proc!(
            $module,
            getAccessibleSelectionCountFromContext,
            extern "system" fn(i32, AccessibleSelection) -> i32,
            $vm_id,
            $as
        )
    };
    // Макрос для вызова функции getAccessibleSelectionFromContext
    ($module:expr,get_accessible_selection_from_context,$vm_id:expr,$as:expr,$index:expr) => {
        call_proc!(
            $module,
            getAccessibleSelectionFromContext,
            extern "system" fn(i32, AccessibleSelection, i32) -> JObject,
            $vm_id,
            $as,
            $index
        )
    };
    // Макрос для вызова функции isAccessibleChildSelectedFromContext
    ($module:expr,is_accessible_child_selected_from_context,$vm_id:expr,$as:expr,$index:expr) => {
        call_proc!(
            $module,
            isAccessibleChildSelectedFromContext,
            extern "system" fn(i32, AccessibleSelection, i32) -> BOOL,
            $vm_id,
            $as,
            $index
        )
    };
    // Макрос для вызова функции isAccessibleTableRowSelected
    ($module:expr,is_accessible_table_row_selected,$vm_id:expr,$at:expr,$row:expr) => {
        call_proc!(
            $module,
            isAccessibleTableRowSelected,
            extern "system" fn(i32, AccessibleTable, JInt) -> BOOL,
            $vm_id,
            $at,
            $row
        )
    };
    // Макрос для вызова функции isAccessibleTableColumnSelected
    ($module:expr,is_accessible_table_column_selected,$vm_id:expr,$at:expr,$column:expr) => {
        call_proc!(
            $module,
            isAccessibleTableColumnSelected,
            extern "system" fn(i32, AccessibleTable, JInt) -> BOOL,
            $vm_id,
            $at,
            $column
        )
    };
    // Макрос для вызова функции getAccessibleTableCellInfo
    ($module:expr,get_accessible_table_cell_info,$vm_id:expr,$at:expr,$row:expr,$column:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleTableCellInfo,
            extern "system" fn(
                i32,
                AccessibleTable,
                JInt,
                JInt,
                *mut AccessibleTableCellInfo,
            ) -> BOOL,
            $vm_id,
            $at,
            $row,
            $column,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleTableColumn
    ($module:expr,get_accessible_table_column,$vm_id:expr,$at:expr,$index:expr) => {
        call_proc!(
            $module,
            getAccessibleTableColumn,
            extern "system" fn(i32, AccessibleTable, JInt) -> JInt,
            $vm_id,
            $at,
            $index
        )
    };
    // Макрос для вызова функции getAccessibleTableRow
    ($module:expr,get_accessible_table_row,$vm_id:expr,$at:expr,$index:expr) => {
        call_proc!(
            $module,
            getAccessibleTableRow,
            extern "system" fn(i32, AccessibleTable, JInt) -> JInt,
            $vm_id,
            $at,
            $index
        )
    };
    // Макрос для вызова функции getAccessibleTableColumnSelectionCount
    ($module:expr,get_accessible_table_column_selection_count,$vm_id:expr,$at:expr) => {
        call_proc!(
            $module,
            getAccessibleTableColumnSelectionCount,
            extern "system" fn(i32, AccessibleTable) -> JInt,
            $vm_id,
            $at
        )
    };
    // Макрос для вызова функции getAccessibleTableRowSelectionCount
    ($module:expr,get_accessible_table_row_selection_count,$vm_id:expr,$at:expr) => {
        call_proc!(
            $module,
            getAccessibleTableRowSelectionCount,
            extern "system" fn(i32, AccessibleTable) -> JInt,
            $vm_id,
            $at
        )
    };
    // Макрос для вызова функции getAccessibleTableIndex
    ($module:expr,get_accessible_table_index,$vm_id:expr,$at:expr,$row:expr,$column:expr) => {
        call_proc!(
            $module,
            getAccessibleTableIndex,
            extern "system" fn(i32, AccessibleTable, JInt, JInt) -> JInt,
            $vm_id,
            $at,
            $row,
            $column
        )
    };
    // Макрос для вызова функции getAccessibleTableColumnSelections
    ($module:expr,get_accessible_table_column_selections,$vm_id:expr,$at:expr,$count:expr,$selections:expr) => {
        call_proc!(
            $module,
            getAccessibleTableColumnSelections,
            extern "system" fn(i32, AccessibleTable, JInt, *mut JInt) -> BOOL,
            $vm_id,
            $at,
            $count,
            $selections
        )
    };
    // Макрос для вызова функции getAccessibleTableRowSelections
    ($module:expr,get_accessible_table_row_selections,$vm_id:expr,$at:expr,$count:expr,$selections:expr) => {
        call_proc!(
            $module,
            getAccessibleTableRowSelections,
            extern "system" fn(i32, AccessibleTable, JInt, *mut JInt) -> BOOL,
            $vm_id,
            $at,
            $count,
            $selections
        )
    };
    // Макрос для вызова функции getAccessibleTextSelectionInfo
    ($module:expr,get_accessible_text_selection_info,$vm_id:expr,$at:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleTextSelectionInfo,
            extern "system" fn(i32, AccessibleText, *mut AccessibleTextSelectionInfo) -> BOOL,
            $vm_id,
            $at,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleTextInfo
    ($module:expr,get_accessible_text_info,$vm_id:expr,$at:expr,$info:expr,$x:expr,$y:expr) => {
        call_proc!(
            $module,
            getAccessibleTextInfo,
            extern "system" fn(i32, AccessibleText, *mut AccessibleTextInfo, JInt, JInt) -> BOOL,
            $vm_id,
            $at,
            $info,
            $x,
            $y
        )
    };
    // Макрос для вызова функции getAccessibleTextAttributes
    ($module:expr,get_accessible_text_attributes,$vm_id:expr,$at:expr,$index:expr,$info:expr) => {
        call_proc!(
            $module,
            getAccessibleTextAttributes,
            extern "system" fn(
                i32,
                AccessibleText,
                JInt,
                *mut AccessibleTextAttributesInfo,
            ) -> *const u8,
            $vm_id,
            $at,
            $index,
            $info
        )
    };
    // Макрос для вызова функции getAccessibleTextItems
    ($module:expr,get_accessible_text_items,$vm_id:expr,$at:expr,$info:expr,$index:expr) => {
        call_proc!(
            $module,
            getAccessibleTextItems,
            extern "system" fn(i32, AccessibleText, *mut AccessibleTextItemsInfo, JInt) -> BOOL,
            $vm_id,
            $at,
            $info,
            $index
        )
    };
    // Макрос для вызова функции getAccessibleTextLineBounds
    ($module:expr,get_accessible_text_line_bounds,$vm_id:expr,$at:expr,$index:expr,$start_index:expr,$end_index:expr) => {
        call_proc!(
            $module,
            getAccessibleTextLineBounds,
            extern "system" fn(i32, AccessibleText, JInt, *mut JInt, *mut JInt) -> BOOL,
            $vm_id,
            $at,
            $index,
            $start_index,
            $end_index
        )
    };
    // Макрос для вызова функции getAccessibleTextRange
    ($module:expr,get_accessible_text_range,$vm_id:expr,$at:expr,$start_index:expr,$end_index:expr,$text:expr,$len:expr) => {
        call_proc!(
            $module,
            getAccessibleTextRange,
            extern "system" fn(i32, AccessibleText, JInt, JInt, *mut u16, i16) -> BOOL,
            $vm_id,
            $at,
            $start_index,
            $end_index,
            $text,
            $len
        )
    };
    // Макрос для вызова функции getAccessibleTextRect
    ($module:expr,get_accessible_text_rect,$vm_id:expr,$at:expr,$info:expr,$index:expr) => {
        call_proc!(
            $module,
            getAccessibleTextRect,
            extern "system" fn(i32, AccessibleText, *mut AccessibleTextRectInfo, JInt) -> BOOL,
            $vm_id,
            $at,
            $info,
            $index
        )
    };
    // Макрос для вызова функции getCurrentAccessibleValueFromContext
    ($module:expr,get_current_accessible_value_from_context,$vm_id:expr,$av:expr,$value:expr,$len:expr) => {
        call_proc!(
            $module,
            getCurrentAccessibleValueFromContext,
            extern "system" fn(i32, AccessibleValue, *mut u16, i16) -> BOOL,
            $vm_id,
            $av,
            $value,
            $len
        )
    };
    // Макрос для вызова функции getMaximumAccessibleValueFromContext
    ($module:expr,get_maximum_accessible_value_from_context,$vm_id:expr,$av:expr,$value:expr,$len:expr) => {
        call_proc!(
            $module,
            getMaximumAccessibleValueFromContext,
            extern "system" fn(i32, AccessibleValue, *mut u16, i16) -> BOOL,
            $vm_id,
            $av,
            $value,
            $len
        )
    };
    // Макрос для вызова функции getMinimumAccessibleValueFromContext
    ($module:expr,get_minimum_accessible_value_from_context,$vm_id:expr,$av:expr,$value:expr,$len:expr) => {
        call_proc!(
            $module,
            getMinimumAccessibleValueFromContext,
            extern "system" fn(i32, AccessibleValue, *mut u16, i16) -> BOOL,
            $vm_id,
            $av,
            $value,
            $len
        )
    };
}
