vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 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
Re: Wertaustausch EXE <-> ActiveX Dll 
Autor: Wöllmi
Datum: 09.01.06 22:21

Hi Dirk,

hm, ist evtl. von mir etwas kompliziert ausgedrückt. Ich versuch es einmal anders.

Also in der globalen Systemvariable (EXE) werden 32 Bit (Als Long) gehalten,
die allen Modulen des Projektes wichtige Statusinformationen bereitstellen.
Z.B. "Ablauf gesperrt wegen Usersperre", "Unerwarteter Fehler in der Kommunikation",
"Userstatus (Level)" usw.
Diese Infos werden also in einem Long gehalten und können Systemweit für
Fallentscheidungen genutzt werden.
Nun kann man jedoch z.B. den "Userlevel" (4-Bit => 16 Level sind so mgl.) in verschiedenen Masken, u.a. auch über die DLL ändern. Da über Events aus
Funktionen, die in der DLL gehalten werden auch Kommunikationsvorgänge gesteuert
werden, die in der EXE gemanagt werden.
D.h. in der DL ist ein Dialog aktiv, der eine Kommunikation mit z.B. einer SPS via.
RS232 erfordert.
1. Die DLL meldet also via Event der EXE "kommuniziere" mit der SPS
2. In der EXE wird die Kommunikation ausgelöst, die wiederum die Statusflags
überwacht (z.B. vorzeitiger Abbruch => Taste im Dialog der DLL)
3. Die Kommunikationsroutine, welche als Modul in der EXE gehalten wird muß also
diese Info erhalten. Und zwar von dem Dialog, der in der DLL aktiv ist.
geht ja auch => Eventsteuerung. z.B. Click eines Buttons.
4. Andersrum stelle man sich ein Timeout vor und der Dialog in der DLL bekommt die Info nicht.

Ergo: ich brauche einen laufenden Austausch (Abgleich) des Wertes in
der Statusvariable, damit sowhl DLL als auch EXE informiert sind.

Wie gesagt normalerweise gebe ich so eine Variable via Adresse z.B. eine Klasse
bekannt, und habe so auf ein und die selbe Variable auch aus einer Klasse
direkten Zugriiff. Mit einer DLL geht dies aber nicht so einfach.

Aber ich habe mir jetzt erstmal eine Übergangslösung geschaffen.
1. In der EXE
Jede Änderung der Statusvariable führt nun automatisch dazu, daß
die Poperty in der DLL sofort mit geändert wird:

Variable= Wert
DLL.property = Wert

2. In der DLL
Jede Änderung der Property wird via Event der EXE mitgeteilt
Property = Wert
RaiseEvent ModifyEXEVariable(Wert)

=> In der EXE wird dann das Event verarbeitet, welches nichts weiter unternimmt wie:
Variable = Übergabewert des Events

Auf diese Weise habe ich immer den Wert in EXE und DLL und kann diesen auch auswerten.

Doch der Schreibaufwand ist nicht unerheblich.

Naja, ne Krücke eben, aber funktioniert.

Ich werde mal im Web weitersuchen. Wenn ich fündig werde, oder ne Eingebung habe,
melde ich mich.

Ideal wäre eine Art Shared Memory. Alle beteiligten Pogrammteile und DLL's
bekommen die Adressen der dort gehaltene Variablen und haben damit
eine sogenannte FAR-Variable im Vollzugriff, also lesen und Schreiben.

Tschaui
Woellmi

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Wertaustausch EXE <-> ActiveX Dll771Wöllmi09.01.06 13:42
Re: Wertaustausch EXE <-> ActiveX Dll431Dirk09.01.06 14:44
Re: Wertaustausch EXE <-> ActiveX Dll526Wöllmi09.01.06 15:12
Re: Wertaustausch EXE <-> ActiveX Dll440Dirk09.01.06 15:29
Re: Wertaustausch EXE <-> ActiveX Dll430Wöllmi09.01.06 22:21
Re: Wertaustausch EXE <-> ActiveX Dll446Dirk10.01.06 09:19
Re: Wertaustausch EXE <-> ActiveX Dll467Wöllmi10.01.06 14:53
Re: Wertaustausch EXE <-> ActiveX Dll434Dirk12.01.06 13:02
Re: Wertaustausch EXE <-> ActiveX Dll534Wö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