Hallo,
lese schon länger im Forum mit. Bin jetzt an einem Punkt wo ich nicht mehr weiter komme, deshalb heut mein erster Beitrag.
Sollte das Thema hir nicht passend sein, dann bitte verschieben.
Kurze Beschreibung der Konstellation:
ISO over TCP:
LibNoDave wird schon länger unter Win XP / Win XP embedded eingesetzt (Delphi 7). Dort gibt es eine 32Bit-Anwendung (D7) die über eine selbst geschriebene DLL (D7) (in ihr wird die Komponente „NoDaveComponent“ verwendet) letztendlich dann die „LibNoDave.dll“ anspricht. Wie gesagt: Läuft so weit.
Aktuell:
Die Anwendung läuft nun unter Delphi 2010 (Unicode, 32Bit). Die eigene DLL gibt es jetzt als Delphi 7 und Delphi 2010 Version. Unter Win XP läuft diese Konstellation (auch D2010 DLL) problemlos.
Unter Win 7 64 Bit läuft diese Konstellation nicht / nicht zuverlässig!
Tests mit „NoDaveDemo.exe“:
Momentan gibt es 2 Versionen (Delphi 7 Original / Delphi 2010)
Getestet wurde mit LibNoDave.dll V0.8.4.4, V0.8.4.6 und der modifizierten libnodave_jfkmod.dll
Die Ergebnisse sind für alle DLLs auf den ersten Blick gleich:
Unter Windows XP läuft quasi alles, D7 und D2010.
Unter Windows 7 64Bit ergibt sich folgendes Bild:
Verhalten von Delphi 7 Testprogramm und Delphi 2010 Testprogramm ist gleich. Debug-Möglichkeit ist unter Win 7 nur innerhalb D2010 vorhanden.
Bei allen Tests ist es so das das Demoprogramm nach entsprechenden Einträgen (DB, Offset, .......) und Aktivierung durch „Start“ mit hoher Wahrscheinlichkeit für ungefähr 20 sec (Windows?) einfriert. Danach besteht entweder keine Verbindung (und alles ist „beim alten“), oder die Verbindung kommt zustande und ein zyklischen Lesen des DBs stottert vor sich hin. Will heißen das das zyklische Lesen immer wieder von teilweise langen Pausen (ca. 20 sec.) unterbrochen wird. Sinnvolle Daten werden dabei aber gelesen.
Kommt die Verbindung nicht zustande wird je nach DLL-Version ein „openSocketw.c: bind Socket error: No error“ gemeldet.
Innerhalb Delphi 2010 wird vor einer fehlgeschlagenen Verbindung innerhalb der „NoDaveComponent.pas“, innerhalb der Procedere „TnoDave.DoConnect“ die Funktion „openSocket „ mit korrekt versorgten Parametern aufgerufen. In der Regel ist der Rückgabewert nach ca. 20 sec (Windows?) „0“, in seltenen Fällen „-1“ (bei funktionierender Verbindung ist der Rückgabewert > 0).
Tests mit 32Bit-Anwendung:
Die Ergebnisse der 32Bit-Anwendung und des Demoprogramms sind vergleichbar.
Und nun?
Nach vielen Tests bin ich jetzt an dem Punkt wo ich erst einmal nicht mehr weiter weiß. Hat eventuell jemand eine Idee?
Viele Grüße
Stephan