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:
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; 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