.........in vero puoi ottenere, sì, un "clone", ma dei puri dati contenuti dalle Strutture che i file header sorgente i Gambas prevedono per la creazione di un oggetto, ed in particolare - in questo caso - di un Frame:
Mi spiego con un semplice esempio (è necessario porre sul Form un Frame ed una TextArea):
Public Sub Button1_Click()
Dim d, i As Integer
Dim clone As Pointer
Dim st As Stream
' Assegna alla variabile "b" la dimensione della Struttura principale del "Frame" da clonare: '
d = Object.SizeOf(Frame1)
' Alloca un'area di memoria pari a quella occupata dalla Struttura principale del "Frame" da clonare: '
clone = Alloc(d)
' Crea una variabile di tipo "Stream", per scrivere dei dati del "Frame" da clonare
' nell'area di memoria puntata dal Puntatore "clone": '
st = Memory clone For Write
' Scrive mediante i "Memory Stream" nell'area di memoria puntata dal Puntatore "clone"
' i dati del "Frame" da clonare (leggendoli dalla sua Struttura principale):'
For i = 0 To d - 1
Write #st, Byte@(Object.Address(Frame1) + i) As Byte
Next
st.Close
' Mostra semplicemente i dati presenti ora nell'area di memoria puntata dal Puntatore "clone",
' i quali sono perfettamente corrispondenti ai dati del "Frame" clonato: '
For i = 0 To d - 1
TextArea1.Text &= i & Space(6) & Hex(Byte@(clone + i), 2) & Chr(10)
Next
TextArea1.text &= "L'oggetto clonato in area di memoria è un: " & String@(Pointer@(Pointer@(clone) + 24))
' Distrugge l'oggetto "Frame1"... '
Frame1.Delete
' ...ma.... l'area di memoria puntata dal Puntatore "clone" continua ad esistere ed ovviamente a contenere
' una copia precisa dei dati della Struttura principale del "Frame" originario clonato: '
TextArea1.text &= Chr(10) & "Indirizzo di memoria del Puntatore 'clone': " & CStr(clone)
End