Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mae

Anmeldungsdatum: 04.06.2008 Beiträge: 26
|
Verfasst am: 05.08.2008, 15:06 Titel: Enum durchschleifen? (VB: FOR EACH x IN y) |
|
|
Manchmal ist es fürchterlich nützlich die enumerieten Konstanten noch einmal durchzublättern. Daher gibt es auch in VB tatsächlich meines wissens eine Lösung dafür.
Doch in FB kann ich das leider nicht anwenden - oder?
Beispiel: in FreeImage.bi werden die Dateiformate die unterstützt werden als Enum deklariert, damit man diese anstatt Nummern mit Namen ansprechen kann. Dabei wurde funktionen dieser Enum-Typ zugewiesen.
Möchte man wissen welche Datei-Formate die aktuelle DLL wirklich gerade unterstützt ist es nicht möglich eine Schleife mit einem Zahlenwert (egal ob integer oder was auch immer) zu durchlaufen - es wird nämlich der Enum-Type erwartet.
...zumindest finde ich keine Lösung...  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 05.08.2008, 20:01 Titel: |
|
|
Zitat: | Manchmal ist es fürchterlich nützlich die enumerieten Konstanten noch einmal durchzublättern. | Das kann man dann in der FreeImage.bi nachsehen.
Hier eine individuelle Lösung:
Code: | Width 80,40
Dim zeile As String
Dim ok As integer
Open "freeimage.bi" For Input As #1
DO
LINE INPUT #1, zeile
If instr(LCase(zeile),LCase("enum FREE_IMAGE_FORMAT")) Then ok=1
If ok = 1 Then PRINT zeile
If instr(LCase(zeile),LCase("end enum")) Then ok=0
LOOP UNTIL EOF(1)
Close #1
Sleep
end | (evtl. den Pfad auf die "freeimage.bi" anpassen.)  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Mae

Anmeldungsdatum: 04.06.2008 Beiträge: 26
|
Verfasst am: 06.08.2008, 12:57 Titel: Pfiffig aber leider nicht akzeptabel... |
|
|
Eine wirklich pfiffige Lösung!! - ganz ohne Frage.
Allerdings nicht das was ich wollte.
Und wenn man es mal weiter betrachtet:
Was ist aber, wenn die Exe-Datei ausgeliefert wird?
Die komplette Entwicklungsumgebung immer mit auf den Kunden-Rechner schleifen?
Muß ich meinen Freunden immer die ganzen Biblotheken, Wrapper oder wie auch immer mit ausliefern? - Oh jeh: Ich weiß nicht welches Installationsprogramm ich da nehmen soll.
Vermutlich heißt die nächste Idee: Binde es in die Resourcen ein.
Aber da ja die BI und die DLL auch nicht immer so zusammenspielen wie so sollen: Versionsunterschiede - bindet man am besten alles ein.
Wozu dann überhaupt noch eine DLL?
Wollte man damit nicht Plattenplatz sparen?
Vermutlich werd' ich genau das machen, was Du bereits gemacht hast mit der FreeImage393 - Die BI so umschreiben das diese einfach ein Stück weiter Flexible wird:
Die Funktion "FreeImage_GetFormatFromFIF" erwartet den Parameter "FREE_IMAGE_FORMAT" - ein Enum-Typ! - diese Funktion ist brauchbar, wenn man sich auflisten lassen möchte welche Plugins die FreeImage.DLL unterstützt. Also welche Bilderformate bzw. Dateiendungen die aktuelle Version unterstützt.
Für den "Datei-Öffnen"-Dialog möchte ich das nun gerne erfahren, damit ich das File-Pattern richtig vor einstellen kann - und ein unerfahrener User nicht alle (un-)möglichen Dateien als Bilder öffnet.
Anscheinend bietet sich nur die Lösung indem man die BI mit einem Funktions-Overload(?) ausstattet, die es dieser Funktion auch erlaubt einen Integer-Wert anstatt nur den Enum-Typ zu unterstützen.
Dann kann man in einer Schleife abfragen welche Dateien Unterstützt werden...
Doch vielleicht hast Du noch jemand wieder eine Überraschende Idee, wie es noch leichter geht? Noch kann ich auch nicht beweisen ob ich überhaupt recht habe mit meiner Theorie...
Komm einfach nicht hinter all dem her, was ich gerne schreiben möchte.
Auf der anderen Seite warte ich natürlich auch noch darauf das mehr VB eigenschaften in FB ermöglicht werden... |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 06.08.2008, 15:22 Titel: |
|
|
Hi,
ich verstehe schon was du damit bezwecken willst aber...
Woher kennt VB die enumerieten Konstanten? .. aus dem Wrapper MFreeImage.bas.
Wird eine alte Version der MFreeImage.bas verwendet um eine neuere DLL anzusprechen, kennt sie die neuen Konstanten natürlich nicht (in der dll werden diese enumerieten Konstanten nicht namentlich angegeben).
Bei einer Versionsänderung muss also auch in VB eine neue Version mit neuem Wrapper compiliert werden?
Oder versteh ich das jetzt ganz verkehrt?
Dein Problem
Zitat: | Die Funktion "FreeImage_GetFormatFromFIF" erwartet den Parameter "FREE_IMAGE_FORMAT" - ein Enum-Typ! - diese Funktion ist brauchbar, wenn man sich auflisten lassen möchte welche Plugins die FreeImage.DLL unterstützt. Also welche Bilderformate bzw. Dateiendungen die aktuelle Version unterstützt.
Für den "Datei-Öffnen"-Dialog möchte ich das nun gerne erfahren, damit ich das File-Pattern richtig vor einstellen kann - und ein unerfahrener User nicht alle (un-)möglichen Dateien als Bilder öffnet. |
lässt sich auch mit der FreeImage393.bi in FB einfach lösen: Code: | #Include Once "FreeImage393.bi"
Screen 19,32
Dim As String fiFormat
For i As Integer = 0 To 50
fiFormat= *FreeImage_GetFormatFromFIF(i)
If fiFormat="" Then Exit for
Print i;" = ";fiFormat,
Next
print
Sleep | Einfach mal probieren  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Mae

Anmeldungsdatum: 04.06.2008 Beiträge: 26
|
Verfasst am: 06.08.2008, 22:40 Titel: |
|
|
"MFreeImage.bas" ? *schulterzuck* ? ...meinst Du jetzt das eigene Programm - finde "MFreeImage.bas" nirgends bei mir...
Da ich gar nicht genau weiß, was ein Wrapper tut (hab nur den Begriff gehört und in Verbindung mit dem Zeugs gebracht)
weiß aber gar nicht wirklich wozu das alles da ist...
Meine Vermutung, (die ich vielleicht gar nicht aufstellen darf) wäre: Solange die Funktion sich nicht grundlegend ändert, wäre der Wrapper (und ich dachte das wäre die *.a-Datei) weiterhin nutzbar. Erst wenn eine Funktion gar nicht mehr ( - oder zumindest nicht mehr mit den gleichen Parametern) ansprechbar wird, zeigt der Wrapper auf eine Falsche Position und schießt die Daten in's Nirvana... - besten falls...
Doch da ich noch keine Zeit gefunden habe damit herumzuspielen weiß ich es eben überhaupt nicht und bin noch weit vom Verstehen entfehrnt...
Auf die Lösung mit dem Pionter Operator wäre ich natürlich überhaupt nicht gekommen. Es war also einfach nur das kleine Sternchen vor der Funktion, die nun diese Sache zum laufen bringt.
Das ist für mich noch sehr der Gewöhnung bedürftig.
Und ich bin ja mal gespannt, wann ich endlich in der Lage bin das eigenständig umzusetzen.
Schließlich will ich ja auch eines Tages einen produktiven Beitrag bringen - und nicht nur immer der sein, der auf eure (sowohl pfiffigen als auch genialen) Antworten angewiesen ist...  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 07.08.2008, 13:01 Titel: |
|
|
Wrapper
MFreeImage.bas ist praktisch die "FreeImage.bi-Datei" für VB, wird in der FreeImage3xxxWin32.zip mitgeliefert.
Von VB wird nur das Laden von DLLs während der Laufzeit unterstützt. (Dynamic_Link_Library)
Externe DLL-Funktionen werden deklariert, im Hintergrund wird die DLL geladen (LoadLibrary) und die Funktionsadresse ermittelt (GetProcAddress).
Das entspricht in FB der Methode mit DYLIBLOAD .. DYLIBSYMBOL .
Eine andere Methode ist die Funktionsadresse aus der DLL statisch schon beim compilieren des Programms einzufügen.
Das hat seine Vor- und Nachteile:
Vorteil: zur Laufzeit muss nicht jede Funktionsadresse zeitaufwändig ermittelt werden.
Nachteil: die Funktionsadressen gelten nur für die DLL-Version aus der sie ermittelt wurden (mit dlltool.exe).
FB verwaltet diese statischen Funktionsadressen in einer libxxx.dll.a Lib-Datei die in einer Deklarations-Datei (xxx.bi) dann mit #Inclib "xxx" eingebunden wird. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Mae

Anmeldungsdatum: 04.06.2008 Beiträge: 26
|
Verfasst am: 07.08.2008, 13:51 Titel: |
|
|
...merk gerade ich hab mir gestern Abend keine Mühe gegeben, vielleicht hätte ich wenigstens Gedult zeigen können und alles lieber heut' morgen mit wachen Augen ansehen sollen.
Vielen Dank umsomehr das Du Dir beim erklären größte Mühe gibtst und mir sogar die Links und Quellen hier einbaust.
Da es allerdings so schön bequem geworden ist - weißt Du zufällig...
Nein! Nur Spaß! Ich hab mir die Artikel schon durch gelesen.
Aber wenn ich es richtig verstehe:
volta hat Folgendes geschrieben: | zur Laufzeit muss nicht jede Funktionsadresse zeitaufwändig ermittelt werden. |
Geschieht dies nicht bei jedem Funktionsaufruf, sondern bereits beim Dynamischen nachladen - oder?
Sollten es also wirklich mehrer DLLs sein, könnte man das doch prima via Splash-Screen überbrücken...
Von daher würde ich jetzt in Zukunft die Dynamische Variation auf jeden fall vorziehen: Man will ja schließlich den Leuten nicht Ihre System-Umgebung vorschreiben...
Oder hab ich da wieder etwas verpennt? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.08.2008, 14:42 Titel: |
|
|
Du lieferst einfach die FreeImage Version mit die dein Programm braucht... |
|
Nach oben |
|
 |
|