BlitzMax hat Probleme mit dem Aufruf von Dll-Funktionen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Artemis

Betreff: BlitzMax hat Probleme mit dem Aufruf von Dll-Funktionen

BeitragFr, Dez 02, 2005 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen.

Ich habe in C# eine Dll geschrieben und in MSIL nach einem Tutorial in eine unmanaged Dll umgeschrieben.

In BlitzPlus funktioniert alles, in BlitzMax jedoch gibt er mir unverständliche Strings aus.

Gibt es denn eine andere Möglichkeit, Funktionen aus einer Dll zu bekommen außer mit "LoadLibraryA" und "GetProcAddress"?

Jolinah

BeitragFr, Dez 02, 2005 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann z.B. mit dlltool.exe (das soviel ich weiss bei MinGW enthalten ist) eine Interface-Lib generieren.

Code: [AUSKLAPPEN]
dlltool --dllname quelle.dll --output-lib ziel.a


Die .a-Datei kannst du dann in BMax direkt importieren. Die Funktionen müssen anschliessend im Extern Block deklariert werden.

Mit dieser Methode musst du die DLL auch immer mitliefern. Die .a-Datei wird einkompiliert.

Suco-X

Betreff: .......

BeitragFr, Dez 02, 2005 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Bmax muss das auch funktionieren, nur besteht BMax doch schon des öffteren auf die schönen CStrings.
Gib mal DLL und Funktionsnamen, dann kann man das ja sehen.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Artemis

BeitragFr, Dez 02, 2005 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist der Link.
  • Zuletzt bearbeitet von Artemis am Di, Apr 04, 2006 14:51, insgesamt einmal bearbeitet

Suco-X

Betreff: ...

BeitragFr, Dez 02, 2005 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Jep, CString Prob.
Probiers mal so

Code: [AUSKLAPPEN]

Strict

Local DllHandle = LoadLibraryA("RegExLib.dll")
If Not DllHandle Then
   RuntimeError("Die Dll ~qRegExLib.dll~q konnte nicht geladen werden!")
EndIf

Global RegEx_IsMatch:Byte(Text$z, RegEx$z)"Win32" = GetProcAddress(DllHandle, "RegEx_IsMatch")
Global RegEx_Replace$z(Text$z, RegEx$z, ReplaceText$z)"Win32" = GetProcAddress(DllHandle, "RegEx_Replace")

Print RegEx_IsMatch("Function Lala", "(^| )Function ")
Print RegEx_Replace("Function Lala", " Function ", " _Function_ ")
Print RegEx_Replace("Function Lala", "^Function ", "_Function_ ")

Input("")


Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Artemis

BeitragFr, Dez 02, 2005 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey vielen Dank!

Aber wofür steht $z ?

Suco-X

Betreff: .....

BeitragFr, Dez 02, 2005 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Das konvertiert nen String automatisch zu nem CString.

Sonst müsstest du

Code: [AUSKLAPPEN]

Global RegEx_IsMatch:Byte(Text:byte ptr, RegEx:byte ptr)"Win32"


und beim Aufruf String.ToCString()

Was ich persönlich nicht so hübsch finde.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group