public void getTCharArray() throws JIException, InterruptedException, UnknownHostException { System.gc(); JICallBuilder callObject = new JICallBuilder( true); callObject.setOpnum(6); Object results[]; callObject.addOutParamAsObject(new JIArray(Byte.class, new int[]{50},1,false), JIFlags.FLAG_NULL); results = comObject.call(callObject); JIArray arrayOfResults = (JIArray)results[0]; Byte[] arrayOfBytes = (Byte[]) arrayOfResults.getArrayInstance(); int length = 50; for (int i = 0; i < length; i++) { System.out.println(arrayOfBytes[i].byteValue()); } }
int getSizeOfAllElementsInBytes () { // int length = numElementsInAllDimensions * JIMarshalUnMarshalHelper.getLengthInBytes(clazz,((Object[])memberArray)[0],JIFlags.FLAG_NULL); //this means that decode has created this array, and we need to compute the size to stay consistent. if ( this.sizeOfNestedArrayInBytes == -1 ) { this.sizeOfNestedArrayInBytes = computeLengthArray ( this.memberArray ); } return this.sizeOfNestedArrayInBytes; }
if (o instanceof JIArray) if (((JIArray)o).isConformant() || ((JIArray)o).isVarying()) ((JIArray)o).setConformant(false); maxCountTemp = ((JIArray)o).getConformantMaxCounts(); ((JIArray)o).setMaxCountAndUpperBounds(listOfMaxCounts2.subList(j,((Integer)listOfDimensions.get(j)).intValue())); j++; if (o instanceof JIArray) if (((JIArray)o).isConformant() || ((JIArray)o).isVarying()) ((JIArray)o).setConformant(((JIArray)o).isConformant()); ((JIArray)o).setMaxCountAndUpperBounds(maxCountTemp);
switch(array.getDimensions()) Object[] obj = (Object [])array.getArrayInstance(); newArrayObj = obj; c = obj.getClass().getComponentType(); Object[][] obj2 = (Object [][])array.getArrayInstance(); int secondDim = ((Object[])subArray).length; int k = 0; newArrayObj = (Object[])Array.newInstance(subArray.getClass().getComponentType(), array.getNumElementsInAllDimensions()); for (int i = 0; i < secondDim;i++) array2 = new JIArray(newArrayObj,true); //should always be conformant since this is part of a safe array. safeArray.addMember(new Short((short)array.getDimensions()));//dim int elementSize = -1; short flags = JIVariant.FADF_HAVEVARTYPE; int upperBounds[] = array.getUpperBounds(); JIStruct[] arrayOfSafeArrayBounds = new JIStruct[array.getDimensions()]; for (int i = 0; i < array.getDimensions();i++) JIArray arrayOfSafeArrayBounds2 = new JIArray(arrayOfSafeArrayBounds,true); safeArray.addMember(new Integer(array2.getNumElementsInAllDimensions()));//size in safearrayunion JIPointer ptr2RealArray = new JIPointer(array2); safeArray.addMember(ptr2RealArray);
access.addItem(item0, new DataCallback() { @Override public void changed(Item item0, ItemState state) { //where items[] is the item created using group.addItem("item"+index) in the constructor JIArray jiArray = items[1].read(true).getValue().getObjectAsArray(); Object[] arrayObj = (Object[]) jiArray.getArrayInstance(); // arrayObj contains the value (or values) of the item for (Object v : arrayObj) { } } });
/** Helper method for creating an array of <code>VARIANT</code>s , IDL signature <code>[in, out] SAFEARRAY(VARIANT) *p</code> * OR <code>[in,out] VARIANT *pArray</code>. The return value can directly be used in an <code>IJIDispatch</code> call. * * @return */ public static JIVariant VARIANTARRAY() { return new JIVariant(new JIArray(new JIVariant[]{JIVariant.EMPTY()}, true),true); }
if (((JIArray)member).isConformant() || ((JIArray)member).isVarying()) listOfMaxCounts.addAll(((JIArray)member).getConformantMaxCounts()); listOfDimensions.add(new Integer(((JIArray)member).getDimensions()));
((JIArray)value).encode(ndr,((JIArray)value).getArrayInstance(),defferedPointers,FLAG);
if(c.equals(JIArray.class)) return ((JIArray)obj).decode(ndr,((JIArray)obj).getArrayClass(),((JIArray)obj).getDimensions(),defferedPointers,FLAG,additionalData);
static int getLengthInBytes ( Class c, final Object obj, final int FLAG ) { if ( obj != null && obj.getClass ().equals ( JIArray.class ) ) { return ( (JIArray)obj ).getSizeOfAllElementsInBytes (); } else { if ( ( c != IJIComObject.class || c != IJIDispatch.class ) && obj instanceof IJIComObject ) { c = IJIComObject.class; } if ( (SerializerDeserializer)mapOfSerializers.get ( c ) == null ) { throw new IllegalStateException ( MessageFormat.format ( JISystem.getLocalizedMessage ( JIErrorCodes.JI_UTIL_SERDESER_NOT_FOUND ), new String[] { c.toString () } ) ); } return ( (SerializerDeserializer)mapOfSerializers.get ( c ) ).getLengthInBytes ( obj, FLAG ); } }
/** Removes the member from the specified index. <br> * * @param index */ public void removeMember(int index) { Object member = listOfMembers.remove(index); if (member instanceof JIArray) { //we need to remove it's max count values also. listOfMaxCounts.removeAll(((JIArray)member).getConformantMaxCounts()); } else if (member instanceof JIStruct && ((JIStruct)member).arrayAdded) { //we need to remove it's max count values also. listOfMaxCounts.removeAll(((JIStruct)member).getArrayMaxCounts()); } if (listOfMaxCounts.size() == 0) { arrayAdded = false; } }
encode(ndr,Array.get(array,i),defferedPointers,FLAG);
switch(array.getDimensions()) Object[] obj = (Object [])array.getArrayInstance(); newArrayObj = obj; c = obj.getClass().getComponentType(); Object[][] obj2 = (Object [][])array.getArrayInstance(); int secondDim = ((Object[])subArray).length; int k = 0; newArrayObj = (Object[])Array.newInstance(subArray.getClass().getComponentType(), array.getNumElementsInAllDimensions()); for (int i = 0; i < secondDim;i++) array2 = new JIArray(newArrayObj,true); //should always be conformant since this is part of a safe array. safeArray.addMember(new Short((short)array.getDimensions()));//dim int elementSize = -1; short flags = JIVariant.FADF_HAVEVARTYPE; int upperBounds[] = array.getUpperBounds(); JIStruct[] arrayOfSafeArrayBounds = new JIStruct[array.getDimensions()]; for (int i = 0; i < array.getDimensions();i++) JIArray arrayOfSafeArrayBounds2 = new JIArray(arrayOfSafeArrayBounds,true); safeArray.addMember(new Integer(array2.getNumElementsInAllDimensions()));//size in safearrayunion JIPointer ptr2RealArray = new JIPointer(array2); safeArray.addMember(ptr2RealArray);
public void UpdateMe(JIUnsignedShort size, JIArray array) { append("C:\\Test\\callback_j.log", "SampleTestServerCallback::UpdateMe entered with array size=" + size + "\n"); System.out.println("SampleTestServerCallback::UpdateMe entered with array size=" + size + "\n"); JIStruct[] structArray = (JIStruct[]) array.getArrayInstance(); for (int i = 0; i < size.getValue().intValue(); i++) { append("C:\\Test\\callback_j.log", "Member 0= " + structArray[i].getMember(0).toString() +"\n"); System.out.println("Array elt=" + i+ ",Member 0= " + structArray[i].getMember(0).toString() + "\n"); } }
/** * Helper method for creating an array of <code>VARIANT</code>s , IDL * signature <code>[in, out] SAFEARRAY(VARIANT) *p</code> OR * <code>[in,out] VARIANT *pArray</code>. The return value can directly be * used in an <code>IJIDispatch</code> call. * * @return */ public static JIVariant VARIANTARRAY () { return new JIVariant ( new JIArray ( new JIVariant[] { JIVariant.EMPTY () }, true ), true ); }
if (((JIArray)member).isConformant() || ((JIArray)member).isVarying()) listOfMaxCounts.addAll(((JIArray)member).getConformantMaxCounts()); listOfDimensions.add(new Integer(((JIArray)member).getDimensions()));
((JIArray)value).encode(ndr,((JIArray)value).getArrayInstance(),defferedPointers,FLAG);
if(c.equals(JIArray.class)) return ((JIArray)obj).decode(ndr,((JIArray)obj).getArrayClass(),((JIArray)obj).getDimensions(),defferedPointers,FLAG,additionalData);
static int getLengthInBytes(Class c,Object obj, int FLAG) { if(obj != null && obj.getClass().equals(JIArray.class)) { return ((JIArray)obj).getSizeOfAllElementsInBytes(); } else { if ((c != IJIComObject.class || c != IJIDispatch.class) && obj instanceof IJIComObject) { c = IJIComObject.class; } if (((SerializerDeserializer)mapOfSerializers.get(c)) == null) { throw new IllegalStateException(MessageFormat.format(JISystem.getLocalizedMessage(JIErrorCodes.JI_UTIL_SERDESER_NOT_FOUND),new String[]{c.toString()})); } return ((SerializerDeserializer)mapOfSerializers.get(c)).getLengthInBytes(obj,FLAG); } }
/** * Removes the member from the specified index. <br> * * @param index */ public void removeMember ( final int index ) { final Object member = this.listOfMembers.remove ( index ); if ( member instanceof JIArray ) { //we need to remove it's max count values also. this.listOfMaxCounts.removeAll ( ( (JIArray)member ).getConformantMaxCounts () ); } else if ( member instanceof JIStruct && ( (JIStruct)member ).arrayAdded ) { //we need to remove it's max count values also. this.listOfMaxCounts.removeAll ( ( (JIStruct)member ).getArrayMaxCounts () ); } if ( this.listOfMaxCounts.size () == 0 ) { this.arrayAdded = false; } }