Announcement

Collapse
No announcement yet.

Delegate und event mit VC8

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delegate und event mit VC8

    Hallo,
    ich habe mit C# ein Ereignis erstellt:
    public delegate void __Connected (Object Sender, int i);
    public event __Connected OnConnected;

    OnConnected += __Connected (ConnectHandle);

    private void ConnectHandle(Object Sender, int i)
    {
    }

    if(OnConnected != null)
    OnConnected(this, 34);


    und möchte das jetzt auch unter VC8 erzeugen.

    Leider scheint das unter VC8 etwas anders realisiert zu sein. Kann mir jemand helfen wie ich das umzusetzen habe nach VC8?

    Danke
    Dieter
    Mache Software wird nie fertig. Man muss sie für fertig erklären.

  • #2

    Ich habe ein kleines Testprojekt erzeugt und konnte das Problem lösen:

    Aus C# rufe ich eine Class-Lib auf, die mit C++ erstellt wurde. Werte aus der Classlib werden mit einem Ereignis an das aufrufende C# Programm zurückgeliefert.

    C++ Class lib
    Code:
    using namespace System;
    
    #include "STDIO.H"
    #include "EventReceiver.h"
    
    namespace MyClassLib
    {
    	public ref class Class1
    	{
    			// TODO: Add your methods for this class here.
    		public:
    			delegate void TypConnected(double);
    			TypConnected^ OnConnected;
    			void Raise_Event()
    			{
    				//EventReceiver^ MyEventReceiver = gcnew EventReceiver();
    				//OnConnected = gcnew TypConnected(MyEventReceiver, &EventReceiver::ConnectedHandle);
    
    				if(OnConnected)
    					OnConnected(42);
    			}
    
    		int getWert()
    		{
    			return(42);
    		}
    	};
    }
    C#
    Code:
    namespace DLL_Test_Main_Csharp
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //DLL_Test_VC8_CLib.Class1 Test_Lib = new DLL_Test_VC8_CLib.Class1();
                MyClassLib.Class1 mylib = new Class1();
                mylib.OnConnected += new MyClassLib.Class1.TypConnected(ConnectedHandle);
                mylib.Raise_Event();
            }
    
            private void ConnectedHandle(double d)
            {
                textBox1.Text = Convert.ToString(d);
            }
        }
    }
    Eine schönen Tag
    Dieter
    Mache Software wird nie fertig. Man muss sie für fertig erklären.

    Comment

    Working...
    X