Incbin bei DLL

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

PhillipK

Betreff: Incbin bei DLL

BeitragSa, Jul 21, 2012 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyho Leute!

Mich quählt grade ein Problem Smile

Aus jux habe ich angefangen, ein kleines Tool für Dwarf fortress zu schreiben, um die dortige konkurenz mal ein wenig in den Schatten zu stellen *grins*

Für meine idee brauchte ich ein paar keystrokes die ich an das programm sende.

Deswegen verwende ich (momentan) noch die AutoitX3.dll, um dies zu realisieren.
Besser gesagt: Ich habe mittlerweile erfolgreich die WinApi methode zum senden von Keystrokes (sendInput) gewrappt, um diese nun relativ einfach zu nutzen (TInput.sendKey([KEY_ENTER,KEY_SHIFT]), brauche die DLL aber für andere dinge (fenster aktivieren u.a.)

Um die dll zu laden habe ich bisher immer LoadLibraryA("pfad") genutzt.

Nun möchte ich aber die DLL mit in die exe per IncBin einbinden, was mit LoadLibraryA aber (anscheinend ? Wink ) nicht geht.

Gibt es eine andere möglichkeit, eine DLL zu laden? Zb die datei als Byte ptr an eine andere funktion zu übergeben (dh selbst die bytes lesen -> incbin möglich, danach an eine WinApi methode zum laden weiterreichen), sodass ich hinterher wieder bei meinem handle lande, um die Funktionen zu initialisieren?

Da ich ein vollkommener Noob bin, was dll's und dll laden angeht, hier mal ein kleines snippet:

BlitzMax: [AUSKLAPPEN]

Global DLLHandle:Int = LoadLibraryA("AutoItX3.dll")


Global AU3_Init() "win32" = GetProcAddress(DLLHandle, "AU3_Init")


(zusammengesucht aus tutorials, obs andere alternativen zum laden gibt, konnte ich bisher noch nicht rausfinden :<)
 

Lion

BeitragSa, Jul 21, 2012 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Gerade mal ausprobiert, das hier scheint zu funktionieren.
Ist eventuell nicht die beste Lösung, aber es läuft.
BlitzMax: [AUSKLAPPEN]
SuperStrict

Framework brl.basic
Import pub.Win32

Incbin "AutoItX3.dll"

CopyFile("incbin::AutoItX3.dll", "lib.dll")

Global DLLHandle:Int = LoadLibraryA("lib.dll")

DeleteFile("lib.dll")

If DLLHandle Then Print "works"

End
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x
 

PhillipK

BeitragSa, Jul 21, 2012 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine intressante lösung oO

Temporäre datei anlegen? Smile

Ich denke, damit kann ich leben. Schonmal ein sehr guter ansatz, danke! Smile
Falls es dennoch eine "bessere" methode gibt, dh ohne tmpfile, wäre das natürlich besser -
Es kann immer mal zu einem problem kommen, was dafür sorgt, das man unerwünschte tmp-leichen hat Very Happy

BtbN

BeitragSa, Jul 21, 2012 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist möglich, eine DLL komplett manuel zu laden, das sprengt aber jeden Rahmen da man einen kompletten PE loader selber implementieren muss.
Ein Tempfile ist klar die beste Lösung, und wenn du das ins Tempdir vom system machst, kannst du da auch immer auf jeden fall schreiben.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group