This is the closest I've gotten to where the compiler won't complain on either compile or debug, but it's got the flaw where the returned variant has the correct number of dimensions, but the values are empty:
Code:
#COMPILE EXE #DIM ALL #INCLUDE "WIN32API.INC" TYPE myStructure element1 AS INTEGER element2 AS INTEGER element3 AS INTEGER END TYPE CLASS OutterClass INSTANCE myArray() AS myStructure CLASS METHOD CREATE #DEBUG PRINT "Outter Class Created" END METHOD CLASS METHOD destroy #DEBUG PRINT "Outter Class Destroyed" END METHOD INTERFACE OutterInterface INHERIT IUNKNOWN PROPERTY GET myArray() AS VARIANT LOCAL rArray AS VARIANT LET rArray = myArray() PROPERTY = rArray END PROPERTY PROPERTY SET myArray(BYVAL vArray AS VARIANT) DIM myArray(0) LET myArray() = vArray END PROPERTY METHOD SayHello(BYVAL Index AS LONG) #DEBUG PRINT "Hello: " & STR$(Index) END METHOD END INTERFACE END CLASS FUNCTION PBMAIN () AS LONG LOCAL ThisArray() AS myStructure, ThatVariant AS VARIANT, aIndex AS LONG LOCAL OtherArray() AS myStructure, OtherVariant AS VARIANT LOCAL object1, object2 AS OutterInterface LET object1 = CLASS "OutterClass" object1.sayhello 1 LET object2 = object1 object1.sayhello 2 ' dim and fill the array DIM ThisArray(3) FOR aIndex = 0 TO 3 ThisArray(aIndex).element1 = aIndex + 1 ThisArray(aIndex).element2 = (aIndex + 1) * 10 ThisArray(aIndex).element3 = (aIndex + 1) * 20 NEXT aIndex ' print verifications FOR aIndex = 0 TO 3 #DEBUG PRINT "ThisArray(1):" & STR$(aIndex) & "=" & STR$(ThisArray(aIndex).element1) #DEBUG PRINT "ThisArray(2):" & STR$(aIndex) & "=" & STR$(ThisArray(aIndex).element2) #DEBUG PRINT "ThisArray(3):" & STR$(aIndex) & "=" & STR$(ThisArray(aIndex).element3) NEXT aIndex ' store the array LET ThatVariant = ThisArray() object1.myArray = ThatVariant LET object1 = NOTHING object2.sayhello 2 #DEBUG PRINT IIF$(ISTRUE ISOBJECT(object1), "Is still an object", "No longer an object") OtherVariant = object2.myArray DIM OtherArray(0) LET OtherArray() = OtherVariant ' print verifications FOR aIndex = 0 TO 3 #DEBUG PRINT "OtherArray(1):" & STR$(aIndex) & "=" & STR$(OtherArray(aIndex).element1) #DEBUG PRINT "OtherArray(2):" & STR$(aIndex) & "=" & STR$(OtherArray(aIndex).element2) #DEBUG PRINT "OtherArray(3):" & STR$(aIndex) & "=" & STR$(OtherArray(aIndex).element3) NEXT aIndex LET object2 = NOTHING END FUNCTION
Comment