Die Community zu .NET und Classic VB.
Menü

Klasse: ASM Subclasser

 von 

ASM Subclasser  

Diese Subclassing-Möglichkeit in ASM ermöglicht ein einfaches und sauberes Subclassing ohne Modul in Visual Basic 5/6.

Dafür wird ein ASM-Wrapper in einen ausführbaren Speicherbereich geschrieben. Durch einen internen Zähler wird dabei sichergestellt, dass der Wrapper erst zerstört wird, wenn keine Verweise mehr auf diesen zeigen, wodurch die Methode extrem stabil ist. In dem Beispielprojekt wird auch gezeigt, wie sich die Lösung statt in einer Klasse in einer Form realisieren lässt.

Für technisches Hintergrundwissen sei hiermit auf folgende interessante Forendiskussion zu dem Thema und zu dieser Klasse im Speziellen hingewiesen: Forenbeitrag zur Funktionsweise des ASM-Wrappers und Forenbeitrag zum internen Zähler.

Download Subclasser.zip [11276 Bytes]

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Arndt am 18.03.2011 um 08:19

In Class_Terminate wird der Rekursionszähler aus pASMWrapper + 104 gelesen und das Delete-Flag in pASMWrapper + 108 geschrieben, das sollte 96 bzw. 100 sein.

Richtig:

'Zähler auslesen
Call CopyMemory(Counter, ByVal (pASMWrapper + 96), 4)
...
'Wrapper befindet sich noch innerhalb einer Rekursion und muss sich selbst löschen Flag setzen
Flag = 1
Call CopyMemory(ByVal (pASMWrapper + 100), Flag, 4)

(Danke für den Hinweis von Timo @ TimoSoft)