BMax dll laden

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Trust

Betreff: BMax dll laden

BeitragSo, Jan 07, 2018 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallöchen,

habe zu Testzwecken mal mit BMax eine dll (dlltest.dll) erzeugt welche nur eine Funktion "AddIntegers" beinhaltet und möchte diese nun laden.

Nun funktioniert das aber nicht mit dem Befehl "Extern":
BlitzMax: [AUSKLAPPEN]
Extern ' "Win32"
Function AddIntegers:Int(val1:Int, val2:Int)
End Extern

Print AddIntegers(1, 1)


Dies gibt mir die folgende Fehlermeldung:
Code: [AUSKLAPPEN]
undefined reference to `AddIntegers'


Die Dokumentation von Extern ist leider ubrauchbar:
BlitzMax: [AUSKLAPPEN]
Rem
Extern marks the beginning of an external list of function declarations.
End Rem


Extern
Function puts( str$z )
Function my_puts( str$z )="puts"
End Extern

puts "Using clib's put string!"
my_puts "Also using clib's put string!"



Versuche ich die dll über folgende Befehle zu laden, funktionierts:
BlitzMax: [AUSKLAPPEN]
Local DllHandle:Int  = LoadLibraryA("dlltest.dll")
Global AddIntegers:Int(val1:Int, val2:Int)"Win32" = GetProcAddress(DllHandle,"AddIntegers")


Print AddIntegers(1, 1)


Dies scheint mir aber zu umständlich, weiß da jemand warum das mit extern nicht funktioniert?

G
Trust
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
 

Lador

BeitragMo, Jan 22, 2018 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Trust,

ist zwar schon ein paar Tage alt, aber bevor dir hier keiner mehr antwortet, geb ich mal meinen Senf dazu. Very Happy

Kann es sein, dass du bei Extern als "Argument" den Namen deiner DLL übergeben musst? In deinem Fall also "dlltest" (ich glaube, die Dateiendung wird nicht gebraucht). Und die DLL muss ich natürlich im gleichen Ordner befinden wie deine Exe oder in einem Ordner, der im Windows-Path gelistet ist.

Ich möchte an dieser Stelle aber anmerken, dass ich selbst kaum was mit DLLs in BlitzMax gemacht habe und das jetzt eher Intuition meinerseits ist... (hab neulich eine DLL in Java eingebunden)

MFG Lador
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran"
Screenshot | Worklog
Fortschritt: ca. 70%

Trust

BeitragDo, Jan 25, 2018 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Lador,

das funktioniert leider nicht, hatte ich auch schon probiert Confused .


G,
Trust
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Thunder

BeitragMi, Jan 31, 2018 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du dir wünscht sollte theoretisch möglich sein, wird aber soweit ich weiß nicht von BlitzMax supportet.
Man müsste in den bmk einbauen, dass er deine exe files direkt mit den zugehörigen DLLs linkt, wobei es schwer wäre zu unterscheiden, wann mit welchen DLLs gelinkt werden soll, also müsste sich das der bmk aus den Source files suchen. By default linkt er wahrscheinlich system libraries wie user32.dll etc. sodass du Funktionen von dort mit Extern einbinden kannst.

Prinzipiell, wenn du die extra DLL nicht brauchst, bau einfach ein Modul. Das ist der BlitzMax-Weg dafür.
Und du verlierst dadurch nicht sofort die Plattformunabhängigkeit.

Wenn du sie brauchst, dann LoadLibrary.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group