title image


Smiley Ich würde das über eine ActiveX-exe realisieren.
Da es einer ActiveX-exe ja egal ist, in welcher Progsprache das Client-Programm geschrieben ist,

ist das wahrscheinlich das einfachste.



Die ActiveX-exe braucht im Prinzip zwei Klassen, eine mit der Instancing-Eigenschaft "MultiUse"

und eine mit der Instancing-Eigenschaft "Private" und ein bas-Modul.



Das Client-Programm erstellt sich ein Objekt dieser ActiveX-exe (das MultiUse-Objekt).

Dieses MultiUse-Objekt frägt im Initialize-Event eine Variable vom bas-Modul ab.

In dieser Variablen ist ein Verweis auf das Private-Objekt gespeichert.

Ist diese Variable Nothing, dann gibts noch kein Private-Objekt und es wird eines erstellt,



Wenn nun irgendwelche Informationen zwischen den Programmen ausgetauscht werden sollen, dann

ruft die "Sender-Anwendung" einfach eine bestimmte Methode von ihrer ActiveX-Klasse auf.

Diese ActiveX-Klasse gibt diese Informationen an die Private-Klasse weiter und diese Private-Klasse

wiederum gibt sie an alle (oder an bestimmte) andere MultiUse-Klassen weiter, die ihrerseits

wieder das entsprechende Programm benachrichtigen.





Beispiel: (nicht getestet, nur getippt)





ActiveX-Exe:







'// Klasse 

'// Name: ClientConnect

'// Instancing: Multiuse





Option Explicit



Private MstrClientName As String

Private MstrKey As String





'// Event, das im ClientProgramm empfangen werden kann

Public Event Hallo(Infos As String)





Friend Property Get ClientName()As String

   '// damit das Handler-Objekt abfragen kann, wie ich heiße

   ClientName = MstrClientName

End Property



'// Key-Eigenschaft, damit das Handler-Objekt die einzelnen Clients verwalten kann

Friend Property Get Key() As String

   Key = MstrKey

End Property



Friend Property Let Key(ByVal strKey As String)

   MstrKey = strKey

End Property



Friend Sub RouteMessage(strInfos As String)

   '// Wird vom Handler aufgerufen, wenn das event ausgelöst werden muß

   RaiseEvent Hallo(strInfos)

End Sub



Public Sub NewClient(ByVal strName As String)

   '// Das Programm muß diese Sub aufrufen, um sich ordungsgemäß anzumelden

   MstrClientName = strName

End Sub



Public Sub DisconnectClient()

   '// Das Client-Programm muß diese Sub aufrufen, um sich abzumelden

   GclsHandler.DelClient Me

End Sub



Private Sub Class_Initialize()

   If GclsHandler Is Nothing Then

      '// bei Bedarf neues Handler-Objekt erstellen

      Set GclsHandler = New Handler

   End If

   '// den Zähler für die angemeldeten Clients erhöhen

   GlngClientCount = GlngClientCount + 1

   '// dem Handler-Objekt einen Verweis auf mich selbst geben.

   GclsHandler.SetClient Me

End Sub





Public Sub SendInfos(ByVal strProg As String, ByVal strInfos As String)

   '// Sub, die von einem Programm aufgerufen wird, wenn es einem anderen Programm

   '// was sagen will



   '// die Meldung an den Handler weiterreichen

   GclsHandler.RouteMessageTo strProg, strInfos

End Sub





Private Sub Class_Terminate()

   '// den Zähler für die angemeldeten Clients erniedrigen

   GlngClientCount = GlngClientCount + 1

   If GlngClientCount = 0 Then

      '// das Handler-Objekt löschen, wenn sich der letzte

      '// Client abgemeldet hat.

      Set GclsHandler = Nothing

   End If

End Sub







'// Klasse 

'// Name: Handler

'// Instancing: Private



Option Explicit





Private mCol as Collection



Public Sub SetClient(ByRef clsClient As ClientConnect)

Static lngKey As Long



   lngKey = lngKey + 1

   clsClient.Key =  "X" & lngKey

   mCol.Add clsClient "X" & lngKey

End Sub





Public Sub DelClient(ByRef clsClient As ClientConnect)

   mCol.Remove clsClient.Key

End Sub





Public Sub RouteMessageTo(ByVal strName As String, ByVal strInfos As String)

Dim clsClient As ClientConnect

   '// die Meldung an die richtigen Clients weiterreichen

   For Each clsClient In mCol

      If clsClient.ClientName = strName Then

         clsClient.RouteMessage strInfos   

      End If

   Next clsClient

End Sub





'// bas-Modul



Option Explicit



Public GclsHandler As Handler

Public GlngClientCount As Long



 
Gruß
Gaga

___________________________________________________________________

Profilösungen für VB6
wenn nicht anders angegeben, sind alle Codebeispiele nicht getestet, nur getippt


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: