Autor Beitrag
Maddox
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 05.07.10 10:38 
Hallo,

ich habe folgendes Problem:

Beim erstellen von einem Windows Service, ruf ich in einem Thread die Methode
Marshal.GetFunctionPointerForDelegate(SetRecvCallbackEvent) auf.
Diese benötige ich um einen Pointer auf eine in C++ geschriebene Funktion zu übergeben.

Hier ein Ausschnitt des Relevanten Codes:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
public delegate void SetRecvCallback(netIP_Data data);
public class Driver {
  public static event SetRecvCallback SetRecvCallbackEvent;
  public Driver() {
    IntPtr ptr;
    // Set Receive Delegate
    ptr=Marshal.GetFunctionPointerForDelegate(SetRecvCallbackEvent);
    GC.KeepAlive(ptr);
    Accsess.Access.setRecvDelegate(ptr);
  }
}

public void StartControl() {
  public control() { }
  public class control {
    Driver.SetRecvCallbackEvent+=new SetRecvCallback(driver_SetRecvCallbackEvent);
    ThreadStart tr = new ThreadStart(TimeCheckBeschattung);
    Thread TimeCheck = new Thread(tr);
    TimeCheck.Start();
    Driver driver = new Driver();
  }
    
  private void driver_SetRecvCallbackEvent(netIP_Data data) {
    StreamWriter fs = File.AppendText((Directory.GetCurrentDirectory()+@"\"+"error"+".err");
    fs.WriteLine("{0}; {1}", _string, DateTime.Now.ToString());
    fs.Close();
  }
}


Leider wird das Delegate (Event) im Windwos Dienst nicht gefeuert.
Sprich:
Methode wird nicht Aufgerufen: driver_SetRecvCallbackEvent(netIP_Data data) bzw.
das Event SetRecvCallbackEvent wird nicht Gefeuert.

Kann mir da jemand einen Tipp geben.

PS: als Consolenanwendung läuft das Programm.

Danke für eure hilfe