Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 13.03.2009, 14:07 Titel: Types - an DLL weitergeben?!? |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.03.2009, 15:13 Titel: |
|
|
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 |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 13.03.2009, 15:37 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.03.2009, 16:55 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 13.03.2009, 19:27 Titel: |
|
|
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 |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 16.03.2009, 12:25 Titel: |
|
|
@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 |
|
 |
|