Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Pointer auf Pointer eines Array ???

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 21.08.2009, 22:50    Titel: Pointer auf Pointer eines Array ??? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 22.08.2009, 05:53    Titel: Antworten mit Zitat

Versuch mal

Code:
Type CtsxFace field = 1
'...



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 22.08.2009, 10:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 23.08.2009, 00:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz