Event eines Objekts einer exteren dll implementieren?



  • Du hast aber schon eine Methode die folgendermaßen aussieht oder?

    protected void m_opcGroup_DataChange(object sender, EventArgs e) { /* Code */ }
    

    Oder zumindest so ähnlich?

    P.S.
    Gewöhn dir doch mal die ungarische Notation ab. In C# sollte man folgende Notation verwenden: http://msdn.microsoft.com/en-us/library/ms229045.aspx



  • diese funktion bzw. event

    protected void m_opcGroup_DataChange(object sender, EventArgs e) { /* Code */ }
    

    hab ich nich, die hätte ich gerne:)

    schau ich mir OPCServer im Objektexplorer an, hat dieses ein event DataChange.. mit so nem Blitzsymbol, das is tschonmal gut.. das will ich nun implementieren.. weis nich wie das in c# geht



  • BorisDieKlinge schrieb:

    diese funktion bzw. event

    protected void m_opcGroup_DataChange(object sender, EventArgs e) { /* Code */ }
    

    hab ich nich, die hätte ich gerne:)

    Dann schreib sie doch! Ist schließlich Dein Code.



  • Mach die Methode bei Dir im Code.
    Fertig.

    Das ist die Methode die beim Callback aufgerufen wird.
    Der Delegat ist der .NET Weg der Funktionszeiger (salop gesprochen).

    Simon



  • Oder Kurzum:

    Lies Dich einfach mal in das Thema events ein. Es gibt viele Beispiele über Google zu finden und einiges an leicht zu verstehenden Text. Sei doch nicht ständig so faul und lass die arbeit durch andere erledigen.

    Google: c# events



  • PuppetMaster2k schrieb:

    Du hast aber schon eine Methode die folgendermaßen aussieht oder?

    protected void m_opcGroup_DataChange(object sender, EventArgs e) { /* Code */ }
    

    Oder zumindest so ähnlich?

    P.S.
    Gewöhn dir doch mal die ungarische Notation ab. In C# sollte man folgende Notation verwenden: http://msdn.microsoft.com/en-us/library/ms229045.aspx

    Wo bitte siehst du hier ungarische Notation???
    Ich denke du leidest da etwas an Begriffsverwirrung.

    Und ob man sich das "m_" in C# abgewöhnen sollte nur weil MS denkt dass das so sein sollte... darüber kann man zumindest streiten.



  • ich komm nich dahinter:

    namespace OPCAutomationWrapperTest
    {
        public partial class Form1 : Form
        {
    
            public OPCAutomation.OPCServer m_opcServer = null;
            public OPCAutomation.OPCGroup m_opcGroup = null;
    
            public Form1()
            {
                this.m_opcServer = new OPCAutomation.OPCServer();
                this.m_opcServer.Connect("Softing.OPC.S7.DA", null);
                this.m_opcGroup = m_opcServer.OPCGroups.Add("TEST");
                this.m_opcGroup.IsSubscribed = false;
                this.m_opcGroup.UpdateRate = 150;
                this.m_opcGroup.OPCItems.AddItem("DB406.DBW8", 1);
                this.m_opcGroup.IsSubscribed = true;
    //Hier event definieren
                this.m_opcGroup.DataChange += new System.EventHandler(this.m_opcGroup_OnDataChange);
    
                InitializeComponent();
            }
            ~Form1()
            {
                this.m_opcServer.Disconnect();
                m_opcServer = null;
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
            }
    //Hier event rumpf , aber es kommt der fehler
            private void m_OpcGroup_OnDataChange(int dwTransid, int dwCount, int[] phClientItems, object[] pvValues, short[] pwQualities, object[] Date)
            {
    
            }
         }
    }
    
    Fehler	10	"OPCAutomationWrapperTest.Form1" enthält keine Definition für "m_opcGroup_OnDataChange", und es konnte keine Erweiterungsmethode "m_opcGroup_OnDataChange" gefunden werden, die ein erstes Argument vom Typ "OPCAutomationWrapperTest.Form1" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)	C:\Documents and Settings\Operator\My Documents\Visual Studio 2008\Projects\OPCAutomationWrapperTest\OPCAutomationWrapperTest\Form1.cs	28	72	OPCAutomationWrapperTest
    

    naja kein plan^^



  • 1. Schaue was DataChange für ein Delegat verlangt.
    2. Schaue von diesem Delegat die Signatur an.
    3. Erzeuge in Form1 eine Methode die zur Signatur des Delegaten passt.

    Der Fehler kann durch verschiedene Fehler erzeugt worden sein.
    Hauptsächlich passen Delegat und Methodensig. nicht zusammen.

    Simon



  • BorisDiePflaume, m_opcGroup_OnDataChange ... m_OpcGroup_OnDataChange nu darfst du 0x raten was da wohl das Problem sein könnte.



  • hustbaer: Lach ein Kind nicht aus, welches bei seine ersten Schritten hinfällt!

    this.m_opcGroup.DataChange += new OPCAutomation.DIOPCGroupEvent_DataChangeEventHandler(this.m_OpcGroup_OnDataChange);
    

    Die lösung^^

    Der Schlüssel zur weisheit:

    http://www.csharp-station.com/Tutorials/Lesson14.aspx

    ich weis, normal erst lesen dann posten;)



  • Übrigens, den ganzen new BlablabalEventHandler -Kram kannst (und solltest!) Du Dir sparen. C# kann den Delegate-Typ selbst herausfinden. Das spart nicht nur Code und Nerven, es macht das ganze auch leichter änderbar, falls sich der Delegate-Typ mal ändern sollte.

    Mit anderen Worten:

    this.m_opcGroup.DataChange += this.m_OpcGroup_OnDataChange;
    

    Reicht völlig aus, und zwar für *alle* Delegate-Typen.



  • @BorisDieKlinge:
    Freund.
    Die Fehlermeldung sagt (mit etwas anderen Worten): du hast dich vertippt, guck gefälligst nochmal wie das geschrieben gehört.
    Wenn du dazu nicht fähig bist tut es mir leid.


Anmelden zum Antworten