DLL Aufruf

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

count-doku

Betreff: DLL Aufruf

BeitragDo, Dez 19, 2013 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

mal so eine Frage, in BB kann man DLL's ja einigermaßen schnell und leicht einbinden.
In Bmax stoße ich immer nur auf die Möglichkeit per LoadLibraryA die wohl A) relativ langsam ist und B) nicht immer funktioniert. Außerdem lese ich ganz oft Sätze wie, "man muss in Bmax so garkeine DLL's einladen"
(z.B. hier: https://www.blitzforum.de/foru...hp?t=11993 )

Wie bitteschön soll ich dann aber sonst DLL's reinkriegen. Ich habe nirgendwo ne vernünftige Erklärung gefunden. Klar, wenn ich den C Code der DLL kenne kann ich in direkt in BMax importen, den kenne ich aber in meinem Fall nicht.

Meine einzige Vermutung wäre jetzt noch, dass ich in C dann einen Wrapper für die DLL schreiben muss, aber läuft das nicht auch wieder auf LoadLibraryA hinaus?

Oder gibt es irgendeine total einfache Art, DLL's, zu nutzen die ich einfach nur übersehe?

lg,
Count-Doku

BtbN

BeitragDo, Dez 19, 2013 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenns ne einfache C dll ist kannst du einfach den header in ein modul umbauen und ganz normal gegen die dll linken, gcc sollte das auch ohne lib file hin bekommen, das passende lib file zur dll schadet aber auf jedenfall nicht.
Bei C++ must du so oder so einen C wrapper schreiben, da BMax damit nicht umgehen kann. Kannst aber trotzdem auf die gleiche weise ein Modul bauen, und dort den wrapper code ablegen.

count-doku

BeitragDo, Dez 19, 2013 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Also muss ich mir mit C einen Weg drum bauen. Naja danke für die Antwort

Warum kann Bmax keine Userlibs mit decls ?! Very Happy

lg,
Count-Doku

BtbN

BeitragDo, Dez 19, 2013 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil das nicht mehr nötig ist, da es direkt gegen DLLs linken kann. Und eine decls ist nichts anderes als ein Extern block in BMax.

count-doku

BeitragDo, Dez 19, 2013 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also brauche ich ansich nurnoch nen Extern Block?
Das wäre natürlich cool, wo muss dann die DLL hin, zur exe?

BtbN

BeitragDo, Dez 19, 2013 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du must gegen sie linken, ideralerweise indem du dem linker das zur DLL gehörende lib file gibst. Wenn du das nicht tust, must du die funktionen zur laufzeit laden, was je nach OS verschieden abläuft, unter Windows mit besagtem LoadLibrary + GetProcAddress.

count-doku

BeitragDo, Dez 19, 2013 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmh habe es jetzt hinbekommen.
Per LoadLibraryA etc. ist sogar nichtmal so langsam wie befürchtet.

Danke
Count-Doku

Der Eisvogel

BeitragDo, Dez 19, 2013 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo count-doku,

am saubersten ist es dennoch, wenn du ein Lib-File einbindest. Wie du dies selbst generieren kannst, ist hier relativ gut beschrieben:
http://adrianhenke.wordpress.c...-from-dll/

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

count-doku

BeitragDo, Dez 19, 2013 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm okay, wenn ich mir dann mal wieder VisualStudio runtergeladen habe probier ichs.
Danke

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group