| |

Fortgeschrittene ProgrammierungRe: 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  |  |
 | 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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) sevAniGif (VB/VBA) 
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere 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
|
|