| |

ActiveX-ProgrammierungRe: DLL Schützen | |  | Autor: CPUWärmer | Datum: 12.02.05 19:01 |
| Man kann das System verar....en:
Im Grunde ist eine ActiveX-DLL ja auch eine richtige DLL, allerdings eher eine die auf
COM basiert, funktioneller Art. Aber nach Fileart ist die DLL eine Datei die der PE-Loader von Windows einwandfrei als DLL einstufen wird und somit auch alle Mechanismen um die Datei wie eine DLL in den Speicher zu laden.
Dieser Moment ist nun Deine Chance oder Dein Part:
Der PE-Loader wertet den Fileheader aus und wird irgendwann
DLLEntryPoint
aufrufen. Findet der PE-Loader diese Funktion in der DLL, werden zwei Paramter übermittelt: hInstance der DLL (oder Basisaddresse der FileMapped-Struktur) sowie ein Parameter, der angibt, wieso der PE-Loader die DLL laden will bzw. was für ein kernel-Objekt versucht die DLL als Client an sich zu binden. Das kann nur ein Process oder ein Thread sein. Der PE-Loader erwartet von der DLL in jedem Fall, dass sich die DLL rührt und wenigstens ein TRUE für die Bemühungen zurück gibt. Gibt die DLL aber ein FALSE zurück bewirkt das, dass der PE-Loader abbricht und die DLL gar nicht in den Speicher geladen wird. Dann bekommt der VB-USER eine entzückende Meldung über den Verweis-Manager, das war die schlechte Nachricht.
Die gute Nachricht: Zum Check von DLLEntryPoint ist die DLL kurzfristig im Runningmode, das bedeutet, dass die DLL hier ihre Umgebung checken kann. Findet sie eine brauchbare Konstellation vor, so gibt sie True zurück, wenn nicht: False.
Was tun, um dieses Kernel-PE-Feature in die ActiveX-DLL einzubauen?
Nicht viel: Eigentlich nur ein triviales Modul hinzufügen. Ein Schmierpapier, auf das Windows zugreifen kann. Keine Klasse. Dort hinein gehört solch ein Code:
Private Const DLL_PROCESS_ATTACH As Long = 1
Private Const DLL_PROCESS_DETACH As Long = 0
Private Const DLL_THREAD_ATTACH As Long = 2
Private Const DLL_THREAD_DETACH As Long = 3
Public Function DLLEntryPoint(hInstance As Long, dwReason As Long, _
lpReserved As Long) As _
Long
Dim bInit As Boolean
DLLEntryPoint = False
Select Case dwReason
Case DLL_PROCESS_ATTACH : bInit = True
Case DLL_THREAD_ATTACH : bInit = True
End Select
If bInit Then
'... hier prüfen
DLLEntryPoint = True
End If
End Function Nach C-Notation ist auf Groß-u. Kleinschreibung zu achten (der Funktionsname ist damit gemeint). |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevZIP40 Pro DLL 
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|