libnodave gibt nicht alle Handles wieder frei

Zuviel Werbung?
-> Hier kostenlos registrieren
Bau doch eine TCP-Verbindung von der SPS zu deiner Applikation auf, dann kannst du dir die Daten aus dem SPS-Programm heraus schicken lassen und sparst dir die Zeit immer wieder die selben Daten anzufragen.

In der SPS kannst du dann mit AGSEND / AGRECV arbeiten.
 
Ist auch eine Variante, über die ich nachgedacht habe. Es muss dann aber bei Änderungen/Anpassungen auch das SPS-Programm angepasst werden. Dies ist vom Kunden nicht so gewünscht. Und bei diesem Projekt ist es so, dass das SPS-Programm jemand anders schreibt.
 
Das kann ich so in .NET leider nicht verwenden. .NET hat da einen anderen Ansatz. Trotzdem danke für Deinen Tipp.

Hab's jetzt nochmal so probiert:
Die Funktion davefree über den Wrapper (C#) zugänglich gemacht:

[DllImport("libnodave.dll"/*, PreserveSig=false*/)]
public static extern int daveFree(IntPtr p);

Die Funktion dann so aufgerufen:

libnodave.daveFree(Me.daveConn.pointer)
libnodave.daveFree(
Me.daveInterface.pointer)

Hat nichts verändert, war auch nur ein eher halbherziger Versuch.

Gruß, Manni
Die Funktion daveFree sollte nichts bringen und ist daher auch nicht in libnodave.NET.dll enthalten. Der Grund ist, daß diese Funktion automatisch im Destruktor von Pseudopointer, der Basisklasse von daveInterface und daveConnection, aufgerufen wird.
 
Um den Socket freizugeben dienen diese Befehle
aus der Windows API:

closesocket
WSACleanup

http://msdn.microsoft.com/en-us/library/ms737582(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms741549(VS.85).aspx

In PureBasic können die Befehle direkt verwendet werden.

So habe ich es mir ursprünglich gedacht. Schaut euch aber mal diesen Thread an. Der Themenstarter hatte auch Probleme, handles wieder zu schließen. Ich habe ihm daher eine Testversion gemacht, in der closesocket aus Libnodave aufgerufen wird. Mein Verdacht ist das winsock.dll irgendwie Buch führt, aus welchem Kontext handles geöffnet wurden und es daher wichtig ist, sie aus demselben Kontext wieder freizugeben.

http://www.sps-forum.de/showthread.php?t=26040&highlight=libnodave&page=2

Eine erweiterte Version von libnodave.dll findet sich dort im angehängten Archiv.
 
Zurück
Oben