Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
iAtomkeks
Anmeldungsdatum: 06.08.2010 Beiträge: 6
|
Verfasst am: 06.08.2010, 12:00 Titel: DLL Standardfunktionswerte |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
iAtomkeks
Anmeldungsdatum: 06.08.2010 Beiträge: 6
|
Verfasst am: 06.08.2010, 13:35 Titel: |
|
|
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?
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.08.2010, 14:13 Titel: |
|
|
iAtomkeks hat Folgendes geschrieben: | Wie kann der Code bei dir kompiliert werden, oder hast du die DLL?  |
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 |
|
 |
iAtomkeks
Anmeldungsdatum: 06.08.2010 Beiträge: 6
|
Verfasst am: 06.08.2010, 14:32 Titel: |
|
|
Danke für eure Antworten, ich hab es jetzt selbst mit einem statischen Link hinbekommen 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.  |
|
Nach oben |
|
 |
iAtomkeks
Anmeldungsdatum: 06.08.2010 Beiträge: 6
|
Verfasst am: 06.08.2010, 15:56 Titel: |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 06.08.2010, 16:10 Titel: |
|
|
alias "_FUNKTION" |
|
Nach oben |
|
 |
iAtomkeks
Anmeldungsdatum: 06.08.2010 Beiträge: 6
|
Verfasst am: 06.08.2010, 16:39 Titel: |
|
|
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  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 06.08.2010, 17:47 Titel: |
|
|
-p vergessen |
|
Nach oben |
|
 |
iAtomkeks
Anmeldungsdatum: 06.08.2010 Beiträge: 6
|
Verfasst am: 06.08.2010, 17:55 Titel: |
|
|
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 |
|
 |
|