Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
E-P-S
Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 21.08.2009, 23:50 Titel: Pointer auf Pointer eines Array ??? |
|
|
Ich hab mal wieder ne ungewöhnliche Frage und ich hoffe ihr könnt meinen Abstraktionen folgen, es geht immer noch um die Übersetzung der trueSpace SDK nach FreeBasic. In jetzigem Fall geht es um die richtige Anwendung einer bestimmten Funktion. Zunächst mal Code:
Code: | Type CtsxFace
nbrVxs As Short
pFVxs As CtsxFaceVx
r1 As UByte
r2 As UByte
r3 As Any Ptr
normVxs(0 To 3-1) As UByte
materialIdx As UShort
End Type
|
Diese Struktur ist gegeben. Nun gibt es da eine Funktion zu deren Erklärung ich mal das poste was in der SDK steht:
Zitat: | tsxPolyhGetFaceptrArray
PURPOSE Get a pointer to the array of Face-ptrs (0 if not a Polyhedron).
SYNTAX
TSXAPIFN CtsxFace** tsxPolyhGetFaceptrArray(tsxPOLYHEDRON* pPolyh)
PARAMETERS
pPolyh tsxPOLYHEDRON*: a pointer to the polyhedron
RETURNS CtsxFace** |
Sol heißen: Die Funktion erwartet als Parameter einen Pointer - das ist klar - und gibt mir den Pointer auf einen Pointer eines Arrays des Typs CtsxFace zurück.
Ich habe die Funktion von C++ nach FB folgendermaßen übersetzt:
Code: | Declare Function tsxPolyhGetFaceptrArray Alias "tsxPolyhGetFaceptrArray" (pPolyh As tsxPOLYHEDRON) As CtsxFace Ptr Ptr |
Die Frage lautet WIE kann ich das was mir die Funktion zurück gibt in einem Array des entsprechenden Typs "empfangen"?
Hierzu möchte ich anmerken das mir die Größe dieses Arrays bekannt ist. In diesem Falle ist das die Anzahl an Faces.
Daher hab ich es so versucht:
Code: | Dim pFaces(0 To numFaces-1) As CtsxFace Ptr
pFaces(0) = tsxPolyhGetFaceptrArray( sObj ) |
Ausgeben lasse ich mir ein Feld des Arrays durch:
Code: | pFaces(index)->nbrVxs |
Das Programm läuft und es stürzt auch nicht ab, jedoch ist das was ich auslese totaler Käse und absolut keine Werte die in Frage kämen. Sprich: statt 4, 4, 4 kommt sowas wie 32711, 407, 0 etc.
Irgend was läuft also schief - WAS MACHE ICH FALSCH? _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 22.08.2009, 06:53 Titel: |
|
|
Versuch mal
Code: | Type CtsxFace field = 1
'...
|
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
E-P-S
Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 22.08.2009, 11:50 Titel: |
|
|
Leider funktioniert auch das nicht. Es läuft ebenfalls, aber die Werte bleiben so merkwürdig.
Vielleicht handhabe ich die Befehle auch falsch - wer weiß, leider ist die SDK Dokumentation eben sehr dürftig und momentan bin ich wohl der einzige auf diesem "blauen Ball" der PlugIns für tS entwickelt...
Ich versuche mich erstmal schlauer zu machen ob das was ich da mache überhaupt die richtige Methode ist.
Danke erst einmal _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
|
E-P-S
Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 23.08.2009, 01:03 Titel: |
|
|
So, ich hab es (endlich) selbst heraus gefunden. Das Geheimnis des ganzen ist eine FreeBasic Änderung - wer hätte das gedacht.
Zitat: | As of version 0.18.5b, FB's syntax has no way to specify returning a reference, although this will change in future versions. |
Und wo steht das ganze? Beim Peek Befehl !!!
Somit lautet die einfache Antwort:
Pointer zunächst ganz normal in eine Variable übernehmen und dann diese per PEEK nochmal nach dem eigentlichen Pointer abfragen.
Code: | Dim ppFace As Integer Ptr = tsxPolyhGetFaceptrArray( sObj )
Dim pFace As CtsxFace Ptr
pFace = Peek( Integer, ppFace ) |
Mann ey ... an sowas kann man echt 3 Tage verschwenden .... _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
|
|