Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » System

DLL aus Ressource laden

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.RedakteurVolta 08.02.2015

Eine DLL als Resource in das eigene Programm zu speichern ist mit GoRc recht einfach:

50 RCDATA Kernel32.dll

Dies als demo.rc speichern und mit der Build Option 'fbc -s gui demo.rc' in Freebasic kompilieren.
Dazu brauchen wir noch einen passenden Quelltext. Als Beispiel benutze ich hier zwei undokumentierte Subs aus der Kernel32dll.

'DLL aus Resource laden
#Include "Wndows.bi"
#Include "MemoryModule.bi"
'http://www.mediafire.com/download/xcfha1pjfqk/MemoryModule_FB.zip
'ist die ältere Version funktioniert aber sehr gut!
'Die beiden Dateien "libMemoryModule.a" und "MemoryModule.bi"
'sollten in das gleiche Verzeichnis wie die BAS- Datei

'DLL Startadresse fnden
Dim As HGLOBAL Addr_DLL = LoadResource(0,FindResource(0,MAKEINTRESOURCE(50),RT_RCDATA))

Dim GetCurrentConsoleFontEx As Function (ByVal hConsoleOutput As HANDLE _
,   ByVal bMaximumWindow As Integer _
,   ByVal lpConsoleCurrentFontEx As Any Ptr) As Integer
Dim SetCurrentConsoleFontEx  As Function (ByVal hConsoleOutput As HANDLE _
,   ByVal bMaximumWindow As Integer _
,   lpConsoleCurrentFontEx As Any Ptr) As Integer

Dim As HMEMORYMODULE KernelDll
KernelDll = MemoryLoadLibrary(Addr_DLL)
If KernelDll Then 'Adressen der Proceduren finden
  GetCurrentConsoleFontEx = MemoryGetProcAddress(KernelDll,"GetCurrentConsoleFontEx" )
  SetCurrentConsoleFontEx = MemoryGetProcAddress(KernelDll,"SetCurrentConsoleFontEx" )
Else
  Print "Error loading Library."
  Sleep
  End
EndIf

'am Programmende Speicher freigeben
MemoryFreeLibrary(KernelDll)
FreeResource(Addr_DLL)

Die Startadresse der dll im Programm zu finden ist mit API-Funktionen noch recht einfach. Mit einer normalen 'GetProcAddress' - Funktion lässt sich aber im Memory nichts erreichen. Unter Externer Link!diesem Download fand ich passende Funktionen. Damit werden die Subs/Functions wie bei 'DylibLoad' und 'DyLibSymbol' ermittelt.


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 05.02.2015 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 08.02.2015 von RedakteurVolta gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen