Code-Beispiel
DLL aus Ressource laden
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | Volta | 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 diesem Download fand ich passende Funktionen. Damit werden die Subs/Functions wie bei 'DylibLoad' und 'DyLibSymbol' ermittelt.
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|