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:

Types - an DLL weitergeben?!?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 13.03.2009, 14:07    Titel: Types - an DLL weitergeben?!? Antworten mit Zitat

ist es möglich types an eine funktion in einer dll weiterzugeben?
also eine komplette typekollektion.

und wenn ja, wie?
gibts was zu beachten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.03.2009, 15:13    Titel: Antworten mit Zitat

Da du von jeder Variable einen Pointer erhalten kannst, kannst du auch alle TYPEs weitergeben. Zu beachten ist, dass diese evtl. ein Padding ("leerraum" nach jeder Variable, um die Blöcke z.B. auf 4 bytes aufzufüllen) enthalten können, was man allerdings auch verhindern kann (siehe TYPE-Hilfe in der Befehlsreferenz. Das Schlüsselwort heißt glaube ich FIELD). An sich geht das aber ohne Probleme.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 13.03.2009, 15:37    Titel: Antworten mit Zitat

Wenn ich das bisher richtig verstanden habe ist eine TYPE ein "konstruktionsplan" für ein komplexe zusammenstellung verschiedener datentypen.

In welcher Form ist dieser Konstruktionsplan nach dem kompilieren noch vorhanden?
.. zur laufzeit des compilierten programms kann man UDTs dynamisch initialisieren. (Indem man mit NEW platz für diesen selbst-definierten-datentyp reserviert und die startadresse dieses speicherbereiches an einen pointer übergibt.)
Also MUSS der konstruktionsplan immer noch nach dem compilieren vorhanden sein.
Aber ich denke es mangelt an einer Methode wie man diesen Konstruktionsplan als datum verarbeiten oder weitergeben kann.
Adressen kann man leicht weitergeben (im notfall als 32-bit-integer).
Aber was will man mit einer Adresse, wenn man nicht weiss was man dort vorfindet?
Eine möglichkeit ist es, eine gemeinsame bibliothek zu benutzen. Dann muss man aber alles gemeinsam mit der selben bibliothek kompilieren.

Bei der übersetzung der WinAPI ist das eigentlich nicht anders, nur das man dort windows nicht in den sourcen vorliegen hat sondern sich nur mit selbst-gestrickten TYPES annähern kann (die findet man in den .bi-dateien der fb-windows bibliotheken)... also mehr oder weniger glücksspiel... ändert winzigweich etwas an der API merkt man das eventuell gar nicht... wenn es eine übergabe gäbe, könnte man die sicher sehr leicht für sowas nutzen, sowas sehe ich aber leider bisher nicht :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.03.2009, 16:55    Titel: Antworten mit Zitat

Im Speicher liegt der TYPE einfach nur als eine Anreihung von Variablen (evtl mit Padding) vor. Deswegen kann man den eigentlich ganz leicht übergeben.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



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

BeitragVerfasst am: 13.03.2009, 19:27    Titel: Antworten mit Zitat

dll
Code:
sub bla(valiable as mytype Ptr)
print valiable->bla
end sub


app
Code:

type mytype
    bla as string
end type

dim shared foo as mytype

foo.bla = "test"

dllsub(@foo)



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



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 16.03.2009, 12:25    Titel: Antworten mit Zitat

@ThePuppetMaster: der code für die DLL ist in deinem beispiel entscheident-unvollständig! Dort fehlt die deklaration der TYPE "mytype". Sonst kann der kompiler bei der funktion "bla" überhaupt nichts mit dem parameter "valiable" anfangen! 100% beschwert sich der kompiler da..

Und wenn ich die anfrage hier richtig verstanden habe, geht es darum, der dll die struktur von "mytype" aus "app" zu übergeben. Ohne das die DLL die deklaration von mytype kennt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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