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:

DLL Standardfunktionswerte

 
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
iAtomkeks



Anmeldungsdatum: 06.08.2010
Beiträge: 6

BeitragVerfasst am: 06.08.2010, 12:00    Titel: DLL Standardfunktionswerte Antworten mit Zitat

Hi @ all,

ich bin ganz frischer FBler, steige von BlitzBasic um und hab ein Auge auf die Xors3D Engine geworfen. Hab mir nun die Demo gesaugt und will die DLL dynamisch (per dylibload) einbinden, das funktioniert an sich schon super, allerdings haben viele Funktionen der DLL optionale Parameter bzw. Parameter, deren Werte selten abweichen. Es scheint aber mit "dim foo as function ..." nicht möglich zu sein, Standardwerte für Parameter zu definieren, wie mit "declare".

Beispiel:
Code:
dim library as any ptr
dim xCreateCamera as function (byVal parent as integer = 0) as integer
xCreateCamera = dylibsymbol(library,"_xCreateCamera")

Der Parameter "parent" wird trotzdem benötigt, sonst meckert der Compiler:
Xors3D.bas(9) error 1: Argument count mismatch, found ')' in 'eCam = xCreateCamera()'

Ich hoffe ihr könnt mir helfen!

MfG,
iAtomkeks
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 06.08.2010, 13:17    Titel: Antworten mit Zitat

Hallo und willkommen im Forum,

welche FreeBASIC-Version verwendest du?

Indem du folgenden Code compilierst und ausführst, kannst du das feststellen:
Code:
PRINT __FB_SIGNATURE__
SLEEP


Mit der aktuellen FreeBASIC-Version kann ich deinen Beispielcode nämlich problemlos compilieren.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
iAtomkeks



Anmeldungsdatum: 06.08.2010
Beiträge: 6

BeitragVerfasst am: 06.08.2010, 13:35    Titel: Antworten mit Zitat

Meine Version ist 0.21.0b.
Ich habe keine aktuellere Version gefunden.
Wie kann der Code bei dir kompiliert werden, oder hast du die DLL? grinsen
Habe eben eine Zeile vergessen.
Also das hier steht (neben anderen Funktionen) in meinem Header (Xors3D.bi):
Code:
dim library as any ptr
dim xCreateCamera as function (byVal parent as integer = 0) as integer
library = dylibload("Xors3D")
xCreateCamera = dylibsymbol(library,"_xCreateCamera")

Und das hier ist die betreffende Zeile in der Hauptdatei (Xors3D.bas):
Code:
eCam = xCreateCamera(0)

Diese Zeile müsste ja auch ohne die Parameterangabe funktionieren.

Wenn das bei dir alles genauso ist, was könnte unsere Systeme dann noch voneinander unterscheiden neben dem Compiler?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


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

BeitragVerfasst am: 06.08.2010, 14:13    Titel: Antworten mit Zitat

iAtomkeks hat Folgendes geschrieben:
Wie kann der Code bei dir kompiliert werden, oder hast du die DLL? grinsen

Solange die DLL nicht statisch gebunden wird (und dylibsymbol lädt die DLL eben dynmisch), kann der Code ohne Probleme kompiliert werden. Nur das Ausführen macht dann halt Probleme (deswegen solltest du auch prüfenn, ob "library" nach der Zuweisung ein Nullpointer ist).
_________________
» 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
iAtomkeks



Anmeldungsdatum: 06.08.2010
Beiträge: 6

BeitragVerfasst am: 06.08.2010, 14:32    Titel: Antworten mit Zitat

Danke für eure Antworten, ich hab es jetzt selbst mit einem statischen Link hinbekommen lächeln Hatte das vorher aufgegeben, weil ich immer Errors á la "undefined Reference ..." für einige wenige Funktionen erhielt. Das lag aber daran, dass ich in meinem C-Headerkonverter Floats als Double und nicht als Single interpretiert habe.
Jetzt funktioniert alles, ich bin glücklich mit der Sprache, vielleicht sieht man mich hier jetzt öfter. grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
iAtomkeks



Anmeldungsdatum: 06.08.2010
Beiträge: 6

BeitragVerfasst am: 06.08.2010, 15:56    Titel: Antworten mit Zitat

Ich weiß nicht was ich geändert habe (bzw DASS ich überhaupt was geändert habe), aber plötzlich kommt beim Ausführen der Exe folgender Fehler: "Prozedureinsprungspunkt *beliebige erstvorkommende Funktion aus Quelltext* wurde in der Dll 'Xors3D.dll' nicht gefunden."
Die DLL ist im selben Verzeichnis und zusätzlich noch im System32 Ordner.
Wie kann ich das beheben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 06.08.2010, 16:10    Titel: Antworten mit Zitat

alias "_FUNKTION"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iAtomkeks



Anmeldungsdatum: 06.08.2010
Beiträge: 6

BeitragVerfasst am: 06.08.2010, 16:39    Titel: Antworten mit Zitat

Ja, so hab ich das da stehen.
Code:
#INCLIB "Xors3D"
declare function xLoadBrush alias "_xLoadBrush" (byVal path as zstring ptr ,byVal flags as integer = 9,byVal xScale as single = 1.0f,byVal yScale as single = 1.0f) as integer
declare ...

Ich hab mir aus der C "Xors3D.lib" auch eine "libxors3d.dll.a" geschustert, die ist auch in dem Ordner mit drin und sie hat auch schonmal funktioniert grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 06.08.2010, 17:47    Titel: Antworten mit Zitat

-p vergessen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iAtomkeks



Anmeldungsdatum: 06.08.2010
Beiträge: 6

BeitragVerfasst am: 06.08.2010, 17:55    Titel: Antworten mit Zitat

Nicht -p vergessen, sondern Lib nicht (mehr) im Freebasic\lib\win32 Ordner gehabt! Ich dachte, das reicht wenn die im gleichen Verzeichnis wie die Quelldateien ist.. Dankesehr!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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