vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 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

VB.NET - Fortgeschrittene
TEIL 3 
Autor: teccer
Datum: 28.10.04 07:38

OK, du sagtest ich solle einen Delegaten ins Interface setzen. MMhh, das geht so nicht, denn ich wollte keine Kommunikation zwischen UserDLL und dem schon implementierten Interface, sondern eine Kommun. von UserDLL zum Hauptprogramm.

OK, der Reihe nach. Wenn die Plugins geladen werden, wird in der UserDLL, in der Klasse die IPlugIn implementiert die Property Prop angesprochen. Dort hat die UserDLL ein paar Einstellungen vorgenommen, die nun das Hauptprogramm abfragt.

Dann werden alle Plugins in ne Collection geladen und Menü keiert.

Irgendwann wird ein Menu-Click ausgelöst, Dann (siehe Code Hauptprogramm). Es wird eine Instanz der DLL erzeugt und es wird die Methode GetMessage in der UserDLL in der Klasse, die IPlugIn implementiert, angesprochen. Diese Methode empfängt nun als Beispiel die Message "MyItemClick", was so viel bedeutet wie, pass auf liebe DLL man hat dich im menü angeglickt.

Schau dir nun den Code in UserDLL an. Die DLL fragt in GetMesage als Beispiel ab, was für eine Message angekommen ist und reagiert mit einer Instanz einer eigenen Form der Rückmeldung, dass diese angezeigt werden soll und welche es denn ist:

Dim frm As New Form1
            GetMessage.Message = _
              CirculiSDK.PC.Circuli.IPlugIn.ReturnMessages.ShowMyDialogAsMdi
            GetMessage.MyForm = frm
Wie du im Hauptprogramm sehen kannst, wertet es die Rückgabe aus und je nach Rückgabe führt es halt was aus. Wie du aber bis jetzt immer gelesen hast startet die Kommunikation vom Hauptprogramm aus. Es könnte aber sein, dass die DLL irgendwann den Reiz verspürt selbnst die Kommunikation aufzunehmen und genau das klemmt es. Ich kann keinen Delegaten ins Interface setzen, denn weder das Interface noch die UserDLL kennen die Existenz des Hauptprogramms. Somit haben diese auch keine Möglichkeit auf das Hauptprogramm so zu zu gehen. Also dachte ich erst an Socket,TCPListener etc. Probleme hatte ich schon geschildert. Ausserdem ist das mit der Rückgabe nicht so effizient wie mit meiner GetMessage.

Also musste was anderes her. Und jetzt schau dir die andere Auswertung in GetMessage an:

If Message = CirculiSDK.PC.Circuli.IPlugIn.Messages.MyMenuItemClick Then
            Dim param() As Object = _
              {CirculiSDK.PC.Circuli.IPlugIn.ReturnMessages.SetProperties}
            SendMessageMethod.DynamicInvoke(param)
        End If
Die GetMessage bekommt von Hauptprgramm den Delegaten (musst du in dr Parametzerliste ganz nach hinten durch ;)).
Das Teil heisst SendMessage. Der User müsste nun ein Array (param) für die Parameterübergabe erstellen und die Methode dann mit DynamicInvoke auslösen. Da kommen wir der Sache schon näher, aber jetzt kommt das aber.
1. Ich müsste der Prop und der GetMessage den Delegaten immer übergeben und der User müsste manuell in der Prop sich das Ding zwischenspeichern, so dass er auch außerhalb der Klasse von anderen Klassen darauf zugreifen kann. Weil erst dann könnte die UserDLL der jenige sein, der die Kommunikation eröffnet. Die Rückmeldung des Hauptprogramms würde grundsätzlich wieder an GetMessage gehen, was der User ja dann wieder auswerten kann. Mich stört hier die Übergabe
2. Der User hat kein direktes Invoke, sonder er muss erst selber die Param-Liste erstellen, dort die Message platzieren und dann DynamicInvoke asuführen. Schöner wäre einfach eine Methode SendMessage im Interface (somit also auch in der UserDLL), die derjenige aufruft und das Teil mach dann alles selber. Das geht aber schlecht da ein Interface nur den Körper darstellt.

Hier noch den Delegaten aus dem Hauptprogramm.
Delegate Function MyDel(ByVal message As _
  CirculiSDK.PC.Circuli.IPlugIn.ReturnMessages) As String
 
    Public Function MyDelFunc(ByVal message As _
      CirculiSDK.PC.Circuli.IPlugIn.ReturnMessages) As String
        MsgBox(message.ToString)
    End Function
 
Dim MyDelCopy As MyDel
        MyDelCopy = AddressOf MyDelFunc
Die MyDelCopy ist das was an die GetMessage geschickt wird. Aber wie gesagt, mir gefällt das nicht so richtig. Mit würde es erst dann einigermaßen gefallen, wenn ich den Delegaten so übergeben kann, das die UserDLL das Teil nur noch mit:
SendMessage.Invoke(Was für ne Message) aufrufen müsste. Aber meine gestrigen Bemühungen verliefen alle im Sand. Das Teil kennt nach meiner Übergabe nur DynamicInvoke.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Dringend: Kommunikation Schnittstellen1.312teccer27.10.04 08:36
Re: Dringend: Kommunikation Schnittstellen787ModeratorFZelle27.10.04 09:16
Re: Dringend: Kommunikation Schnittstellen878teccer27.10.04 09:39
Re: Dringend: Kommunikation Schnittstellen777ModeratorFZelle27.10.04 09:56
Re: Dringend: Kommunikation Schnittstellen858teccer28.10.04 07:09
TEIL 2866teccer28.10.04 07:11
TEIL 3922teccer28.10.04 07:38
Habe noch was vergessen767teccer28.10.04 07:56
Re: Habe noch was vergessen835ModeratorFZelle28.10.04 09:31
Re: Habe noch was vergessen805teccer28.10.04 10:54
Re: Habe noch was vergessen921ModeratorFZelle28.10.04 12:05
Re: Habe noch was vergessen845teccer28.10.04 12:22
Re: Habe noch was vergessen789ModeratorFZelle28.10.04 12:38
Re: Habe noch was vergessen826teccer28.10.04 13:39
Re: Habe noch was vergessen735ModeratorFZelle28.10.04 13:49
Re: Habe noch was vergessen739teccer28.10.04 13:56
und noch mal755teccer28.10.04 13:58
Re: und noch mal785spike2428.10.04 14:08
Re: und noch mal767teccer28.10.04 14:11
Re: und noch mal722spike2428.10.04 14:20
Re: und noch mal876ModeratorFZelle28.10.04 14:21
Re: und noch mal781teccer28.10.04 15:09
Du machst mich ganz kirre *lach812teccer28.10.04 11:44
Re: Du machst mich ganz kirre *lach806ModeratorFZelle28.10.04 12:13
Re: Du machst mich ganz kirre *lach778teccer28.10.04 12:23
Hier jetzt der Neu-Aufmach-Betreff773teccer28.10.04 15:24
Re: Hier jetzt der Neu-Aufmach-Betreff795ModeratorFZelle28.10.04 15:59
Re: Hier jetzt der Neu-Aufmach-Betreff860teccer28.10.04 16:38
P.S. Und danke für deine ganze Mühe - Ohne Text731teccer28.10.04 16:41
Re: P.S. Und danke für deine ganze Mühe - Ohne Text721ModeratorFZelle28.10.04 16:46
Re: P.S. Und danke für deine ganze Mühe - Ohne Text774teccer28.10.04 17:04
Re: P.S. Und danke für deine ganze Mühe - Ohne Text824ModeratorFZelle28.10.04 17:11
Re: P.S. Und danke für deine ganze Mühe - Ohne Text788teccer28.10.04 17:39
Re: P.S. Und danke für deine ganze Mühe - Ohne Text764ModeratorFZelle28.10.04 18:21
Re: P.S. Und danke für deine ganze Mühe - Ohne Text726teccer28.10.04 19:04
Re: P.S. Und danke für deine ganze Mühe - Ohne Text743ModeratorFZelle28.10.04 20:03
Re: P.S. Und danke für deine ganze Mühe - Ohne Text820teccer28.10.04 20:20
ich schmeiss mich gleich weg *lach*784teccer28.10.04 21:14
Re: ich schmeiss mich gleich weg *lach*770ModeratorFZelle29.10.04 09:25
Re: ich schmeiss mich gleich weg *lach*756teccer29.10.04 09:37
Re: ich schmeiss mich gleich weg *lach*765spike2429.10.04 09:48
Re: ich schmeiss mich gleich weg *lach* 721ModeratorDaveS29.10.04 09:52
Re: ich schmeiss mich gleich weg *lach* 738WaldiMaywood29.10.04 09:56
Stellvertretend für euch drei745teccer29.10.04 10:05
Re: Stellvertretend für euch drei 763ModeratorDaveS29.10.04 10:29
Re: Stellvertretend für euch drei 783teccer29.10.04 11:07
Re: Stellvertretend für euch drei 760ModeratorDaveS29.10.04 11:33
Re: Stellvertretend für euch drei864WaldiMaywood29.10.04 11:12
Re: Stellvertretend für euch drei763teccer29.10.04 11:25
Re: Stellvertretend für euch drei777Micke03.12.04 14:18

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