vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Wertaustausch EXE <-> ActiveX Dll 
Autor: Wöllmi
Datum: 09.01.06 13:42

Hallo zusammen,

ich brauche Eure Hilfe zu folgendem Thema:

Um eine EXE größenmäßig nicht zu stark aufzublähen und um einen
zusammenhängenden Themenblock zu kapseln, habe ich ein Projekt in
eine Exe (Standard-EXE) und eine DLL (AcrtiveX Apartment Threaded)
gesplittet. Die DLL wird immer mit Start der EXE instanziert und erstmalig initialisiert.

Um eine Interaktion zwischen EXE und DLL zu initieren, werden Events
genutzt. Dies klappt auch ganz gut.

Nun bin ich an dem Punkt angekommen, wo ich in der DLL den Wert einer in der
EXE verwendeten Globalen Variablen zur Ablaufsteuerung benötige. D.h.
in der EXE ist der Wert naürlich ohne Probleme bekannt, auswertbar und veränderbar.
Die DLL dagegen kennt weder Variable noch Wert.
Erschwerend kommt hinzu, daß in dieser Variablen auch Änderungen, die aus der
Abarbeitung in der DLL resultieren abgelegt werden sollen.

Es soll also ein Prozedere resultieren, welches sowohl der DLL als auch der EXE
eine gemeinsam bekannte und änderbare Variable bereitstellt.

Die erste Idee waren Zeiger, also einfach der DLL bei der Initialisierung die Adresse
der in der EXE global vorhandenen Variablen übergeben und dann mit CopyMemory arbeiten.
'DLL
public p_SYSVariable as Long
 
Public Property Let mSYSFlags(ByRef SYSFlags As Long)
    p_SYSVariable = VarPtr(SYSFlags)                   'Verweis auf ext 
    ' Systemvariable setzen
End Property
'In der EXE
clsDLL.mSYSFlags = GlobaleVariable
Und die Adresse wird auch korrekt an die DLL übergeben. Nun stelle ich jedoch fest,
daß der Wert der Variablen weder Lesbar noch beschreibbar ist.
Public Declare Sub CopyMemoryRead Lib "kernel32" Alias "RtlMoveMemory" ( _
  Destination As Any, ByVal Source As Long, ByVal Length As Long)
Public Declare Sub CopyMemoryWrite Lib "kernel32" Alias "RtlMoveMemory" (ByVal _
Destination As Long, Source As Any, ByVal Length As Long)
Der Wert der Variablen läßt sich abfragen, stimmt aber nicht mit dem Wert
in der EXE überein.

Hm, liegt wohl an den getrennten Datensegmenten.

Hat jemand einen brauchbaren Lösungsansatz für eine derartige Schnittstelle?

Ich könnte ja auch hier ein Event verwenden, welches der EXE jede Änderung seitens
der DLL mitteilt und umgekehrt in der EXE den Wert der globalen Variablen bei Änderung der DLL als Eigenschaft bekannt geben.
Dies geht zwar, doch wenn mehrere Variablen derart verwendet werden sollen
steigt der Verwaltungsaufwand und die Eventanzahl ja nicht unerheblich.

Wie macht man so etwas richtig?

Danke schon jetzt


Variablen

Tschaui
Woellmi

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Wertaustausch EXE <-> ActiveX Dll771Wöllmi09.01.06 13:42
Re: Wertaustausch EXE <-> ActiveX Dll429Dirk09.01.06 14:44
Re: Wertaustausch EXE <-> ActiveX Dll524Wöllmi09.01.06 15:12
Re: Wertaustausch EXE <-> ActiveX Dll438Dirk09.01.06 15:29
Re: Wertaustausch EXE <-> ActiveX Dll428Wöllmi09.01.06 22:21
Re: Wertaustausch EXE <-> ActiveX Dll444Dirk10.01.06 09:19
Re: Wertaustausch EXE <-> ActiveX Dll465Wöllmi10.01.06 14:53
Re: Wertaustausch EXE <-> ActiveX Dll432Dirk12.01.06 13:02
Re: Wertaustausch EXE <-> ActiveX Dll532Wöllmi12.01.06 17:40

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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