BlitzMax NG dll -> Haxe

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Trust

Betreff: BlitzMax NG dll -> Haxe

BeitragDo, Nov 28, 2019 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

habe mal mit BlitzMax NG eine simple dll erzeugt (geht ja dank Brucey sehr einfach) Creating DLLs
In der dlltest.dll ist folgender code:

BlitzMax: [AUSKLAPPEN]
Function TheAnswer:Int() Export
Return 42
EndFunction


Buildeinstellungen sind:
App Options: Build Shared Library
Platform: Win32
Architecture: x64

Also ist die calling convention cdecl.



In Haxe habe ich folgenden Code:
lib.load

Code: [AUSKLAPPEN]
class Main {

   static var InitBRL:()->Int =  cpp.Lib.load("dlltest","InitBRL",0);
   static var TheAnswer:()->Int = cpp.Lib.load("dlltest","TheAnswer",0);

   static function main():Void {
      InitBRL();
      trace(TheAnswer());
   }
}


Mit folgenden build parametern:
Code: [AUSKLAPPEN]
-cp src
-cpp cpp
-D analyzer-optimize
-main Main


Das compiled wunderbar.
Führe ich die exe dann allerdings aus, bekomme ich folgende Meldung:
Code: [AUSKLAPPEN]

Error : Could not load module dlltest@InitBRL__0
Error : Could not load module dlltest@TheAnswer__0


Die von bmax erzeugte .def file enthält folgendes:
Code: [AUSKLAPPEN]
LIBRARY dlltest
EXPORTS
   TheAnswer
   InitBRL


InitBRL und TheAnswer wurden zwar exportiert jedoch stimmen die Referenzen scheinbar nicht.

Dachte zuerst dass das Problem vom name mangling her rührt.

Durch einen kurzen Blick in den Bmax ng c output musste ich feststellen dass die Namen unberührt bleiben:
Code: [AUSKLAPPEN]
BBINT TheAnswer(){
   return 42;
}
BBINT InitBRL(){
   bbLibInit();
   return 0;
}



Was könnte also das Problem sein?

Hat jemand Erfahrung damit?

Thunder

BeitragSo, Dez 01, 2019 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe keine Erfahrung damit und mit Windows DLLs. Ich kenne auch Haxe nicht, aber hast du schon mal versucht, die Funktion im BlitzMax "TheAnswer__0" zu nennen? Die Fehlermeldung scheint auszusagen, dass er in der DLL so eine Funktion sucht.
Wenn das funktioniert müsste man sich halt noch etwas für InitBRL überlegen, aber in dem einfachen Beispiel sollte die TheAnswer Funktion auch ohne vorheriges InitBRL funktionieren.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Trust

BeitragSo, Dez 01, 2019 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ja habe ich versucht. Die dll wieder in BlitzMax zu laden geht auch. Das ist ein Problem seitens Haxe wie ich feststellen musste.
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group