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 Funktionen nutzen?

 
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: 17.10.2008, 19:01    Titel: DLL Funktionen nutzen? Antworten mit Zitat

Kann mir jemand ein Beispiel nennen, wie man eine DLL lädt, und deren Funktionen nutzen kann.

Eine DLL hab ich, kenne auch deren Funktionen inkl. Übergabeparameter etc.

Ein Stück code, wo eine dll geladen wird, declare usw usw und eben die Funktion dann.

Ich müsste erst probieren, möchte aber einfach wissen ob sich Freebasic für ein Projekt von mir eignet.

Diese Funktionalität müsste schon gegeben sein.

Achja, ist INLINE C++ auch möglich?(das aber nur am Rande)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 17.10.2008, 19:25    Titel: Antworten mit Zitat

inline-c++ ist nicht möglich.

Deklaration einer Funktion aus einer DLL geht wie folgt:

Code:

DELCARE FUNCTION funktionsname LIB "libname" [ALIAS "name_der_funktion_in_der_lib"] ([Parameter...])

_________________
» 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
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 17.10.2008, 19:29    Titel: Antworten mit Zitat

aha, okay.wie schauts mit rückgabewerten aus, etc. ?


und muss man dann die funktion nochmal extra angeben?

also

Function bla: (param1, param2)
bla ......
Return xyz
End Function


usw.

wie wird da in FB gehandhabt?
Und sind immer die Datentypen mit anzugeben?
Wie werden Strings an eine solche Funktion in einer DLL übergeben?

Irgendetwas spezielles zu beachten?

Ich muss, Integer, Float, Strings übergeben können, und auch zurückgeben lassen können.


achja, in der dll sind mehrere hundert funktionen, wie kann ich die dll dann einer variablen zuweisen, würde es einfacher machen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 17.10.2008, 20:54    Titel: Antworten mit Zitat

du weißt schon, was eine funktion ist? happy
eine funktion gibt genau einen parameter zurück, also z.B.
Code:

ergebnis = berechne(1,2)

sollen die übergebenen paremter verändert werden, so müssen diese "ByVal" übergeben weden:

Code:
DELCARE FUNCTION funktionsname LIB "libname" [ALIAS "name_der_funktion_in_der_lib"] (BYVAL parameter1)


http://www.freebasic-portal.de/index.php?s=reftopic&id=157
_________________
» 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
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 17.10.2008, 21:20    Titel: Antworten mit Zitat

mmm

ich hab das jetzt so versucht, hab eine include gemacht, und zum beispiel dieses declare versucht...

Code:
DECLARE FUNCTION xGraphics3D LIB "Xors3d.dll" ALIAS "_xGraphics3D@20" (Widtha As Integer,height As Integer, depth As Integer = 32, mode As Integer = 0, vsync As Integer = 1 ) As integer


wenn ich in der .bas diesen befehl verwende, kommt der fehler es sei nicht deklariert?!?


in glbasic wird das bisher so gehandhabt....

Code:
DECLARE_ALIAS(wrap_xLoadMesh, DLL, "_xLoadMesh@8", (char*,int), int);


und dazu diese funktion...



Code:
FUNCTION xLoadMesh: path$,parent=0

fkt_rv=(DGInt)wrap_xLoadMesh((char*)path_Str.GetStrData(),(int)parent);
      
      return fkt_rv;
ENDFUNCTION


so in der art, das mal als abgeändertes beispiel, weil dort noch inline dazukommt, was aber bei FB nicht notwendig zu sein scheint.

Ich will nur funktionen einer dll wrappen, eventuell parameter als float, integer, oder string übergeben, und bei manchen funktionen keinen rückgabewert, oder auch mal integer, float oder string.

kann ja nicht so schwer sein, oder?


[edit] wo bitteschön muss sich die dll sich befinden, hab die im projektordner, kann sie aber irgendwie nicht finden ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 17.10.2008, 21:41    Titel: Antworten mit Zitat

das @20 darf da AFAIK gar nicht hin.
_________________
» 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
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 17.10.2008, 21:44    Titel: Antworten mit Zitat

ähm warum nicht, das gehört da aber hin.
so wird die funktion IN der dll aber gefunden....

hier mal mein momentaner quelltext...

Code:
#INCLUDE "xors3dtest.bi"

xGraphics3D(800,600)





xUpdateWorld(1.0 )
xRenderWorld()
xFlip()


und die include

Code:
DECLARE FUNCTION xGraphics3D LIB "Xors3d.dll" ALIAS "_xGraphics3D@20" (Widtha As Integer,height As Integer, depth As Integer = 32, mode As Integer = 0, vsync As Integer = 1 ) As integer
DECLARE FUNCTION xUpdateWorld LIB "Xors3d.dll" ALIAS "_xUpdateWorld@4" (speed As Double = 1.0) as integer
DECLARE FUNCTION xRenderWorld LIB "Xors3d.dll" ALIAS "_xRenderWorld@4" (twen As Integer = 1) as integer
DECLARE FUNCTION xFlip LIB "Xors3d.dll" ALIAS "_xFlip@0" () As Integer


die ausgabe lautet....

Code:
C:\Program Files\FreeBASIC\fbc -s gui "xors3dtest.bas"
C:\PROGRA~1\FREEBA~1\bin\win32\ld.exe: cannot find -lXors3d.dll

Make done


okay ich bräuchte keine gui, oder so, eigentlich gar kein fenster irgendeiner art, da die dll das alles macht.
3d engine halt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 18.10.2008, 00:43    Titel: Antworten mit Zitat

ach, ich habs, so geht es.....

Code:
DIM  library AS ANY PTR
library = DYLIBLOAD( "Xors3D" )
Dim xGraphics3D As Function (Widtha AS INTEGER,height AS INTEGER, depth AS INTEGER = 32, mode AS INTEGER = 0, vsync AS INTEGER = 1 ) AS INTEGER
Dim xRenderWorld As Function (twen AS INTEGER = 1 ) AS INTEGER
Dim xUpdateWorld As Function (speed AS DOUBLE = 1.0) AS INTEGER
Dim xFlip As Function () AS INTEGER
xGraphics3D = DYLIBSYMBOL( library, "_xGraphics3D@20" )
xRenderWorld = DYLIBSYMBOL( library, "_xRenderWorld@4" )
xUpdateWorld = DYLIBSYMBOL( library, "_xUpdateWorld@4" )
xFlip = DYLIBSYMBOL( library, "_xFlip@0" )


aber mal eine frage.
kann mann das nicht auch einfach machen, so pro funktion nur eine zeile, oder so?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 18.10.2008, 01:06    Titel: Antworten mit Zitat

ach ja, wenn du die DLLs per DECLARE einbinden willst, brauchst du header-dateien, und die gibt's für deine DLL natürlich nicht... ich weiß jetzt nicht auswendig, wie man die teile erstellt, wird sich irgendwo im englischen Forum finden. mit den Augen rollen
_________________
» 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
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 18.10.2008, 02:13    Titel: Antworten mit Zitat

mmm also so wie in meinem letzten post funktioniert es ja, aber kann man das nicht auch etwas einfacher haben?

also den code vereinfachen, um die dll funktionen zu nutzen?

wäre extrem nett, wenn jemand wüßte wie, weil ich würd gern mehrere hundert befehle für FB Wrappen, is eine kleine nette engine(okay nich kostenlos), mit der man dx9 nutzen kann inklusive aller möglichen effekte, sogar physic könnte ich noch dafür wrappen, aber das ist ne heidenarbeit, wenn also jemand noch nen rat wüßte.....

so wär das cool.smile

Code:
Dim xFlip = DYLIBSYMBOL( library, "_xFlip@0" ) As Function () AS INTEGER
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