DLL Kommunikation...

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

TheShadow

Moderator

Betreff: DLL Kommunikation...

BeitragSo, Feb 27, 2005 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
So... hier möchte ich ein Beispiel posten was z.B. mit BBmax möglich...

z.B. möchte ich dynamisch eine Funktion in einer DLL-Datei aufrufen. Dazu wird die DLL geladen und dann die Adresse von dieser Funktion gesucht. Dann wird ein Function Pointer auf diese Adresse gesetzt. So... Im übrigen wird auch noch die Adresse einer Bmax-Funktion (egal ob z.B. DrawLine oder gar eine eigene) an die DLL-Funktion übergeben. Die DLL Datei ruft dann diese "in der EXE" auf...

So kann man nicht nur auf DLL-Funktionen zugreifen, sondern die DLL kann auf BB-Funktionen zugreifen... Das bringt natürlich ganz neue Möglichkeiten...

Code: [AUSKLAPPEN]

Graphics 640,480,0

Local dll  :Int =LoadLibraryA("dummy.dll")
Local addr1:Int =Int(GetProcAddress(dll,"func1@24"))
Local addr2:Int =Int(Byte Ptr(DrawLine))
Local func1:Int (v0:Int, v1:Float, v2:Float, v3:Float, v4:Float, v5:Int) "Win32"
(Int Ptr(Varptr(func1)))[0]=addr1

Print dll  +" <dummy.dll"
Print addr1+" <func1@24"
Print addr2+" <func2"

For i=1 To 100
   func1(addr2,Rand(0,639),Rand(0,479),Rand(0,639),Rand(0,479),0)
Next

Flip
WaitKey
End



Code: [AUSKLAPPEN]

//MINGW
#define DLLDECL extern "C" __declspec(dllexport)
#define STDCALL __stdcall
#define CDECL __cdecl

DLLDECL int STDCALL func1(int (*func2)(float,float,float,float,int), float a, float b, float c, float d, int e);

DLLDECL int STDCALL func1(int (*func2)(float,float,float,float,int), float a, float b, float c, float d, int e)
{
  return func2(a,b,c,d,e);
}
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group