if (varChild_lVal == COM.CHILDID_SELF) event.childID = ACC.CHILDID_SELF; else if (control instanceof Tree) event.childID = varChild_lVal; else event.childID = varChild_lVal - 1;
event.childID = osToChildID(varChild_lVal);
	int get_accValue(int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pszValue) {		if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED;		if ((varChild_vt & 0xFFFF) != COM.VT_I4) return COM.E_INVALIDARG;				/* Get the default value string from the OS. */		String osValue = null;		int code = iaccessible.get_accValue(varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pszValue);		if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID		if (accessibleControlListeners.size() == 0) return code;		if (code == COM.S_OK) {			int[] pValue = new int[1];			COM.MoveMemory(pValue, pszValue, 4);			int size = COM.SysStringByteLen(pValue[0]);			if (size > 0) {				char[] buffer = new char[(size + 1) /2];				COM.MoveMemory(buffer, pValue[0], size);				osValue = new String(buffer);			}		}		AccessibleControlEvent event = new AccessibleControlEvent(this);		if (varChild_lVal == COM.CHILDID_SELF) event.childID = ACC.CHILDID_SELF;		else if (control instanceof Tree) event.childID = varChild_lVal; // Tree item childIDs are pointers		else event.childID = varChild_lVal - 1; // All other childIDs are 1-based indices		event.result = osValue;		for (int i = 0; i < accessibleControlListeners.size(); i++) {			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);			listener.getValue(event);		}		if (event.result == null) return code;		char[] data = (event.result + "\0").toCharArray();		int ptr = COM.SysAllocString(data);		COM.MoveMemory(pszValue, new int[] { ptr }, 4);		return COM.S_OK;	}