' schrieb:Ich kenne mich leider mit Conrad-Oszis nicht aus und schon gar nicht mit den mitgelieferten DLLs und ich verwende auch (zum Glück) so gut wie keine DLLs (nur im Notfall), so dass ich so ein Problem auch noch nicht hatte.
Ich denke aber, dass Dir da rolfk weiterhelfen kann.
Gruß Markus
Leider nicht wirklich. Ich kenne die Oszis auch nicht und habe im Moment auch kein Interesse sie kennenzulernen. Grundsätzlich hat wohl derjenige der diese Treiber programmiert hat etwas nachlässig programmiert. Der meistvorkommende Fehler in dieser Hinsicht ist dass die DLL einen Array oder Stringpointer erwartet um irgendwelche Information hineinzuschreiben und dass der Programmierer den dazu nötigen Buffer im LabVIEW Diagram nicht korrekt alloziert hat (Initialize Array). Im Gegensatz zu LabVIEW Code wo LabVIEW selber alle nötigen Speicher alloziert, verkleinert und vergrössert und wieder frei gibt wann immer das notwendig ist, kann das bei einem DLL Aufrug nicht automatisch funktionieren. Die DLL hat keine Möglichkeit um Speicher nach Bedarf anzufordern und an LabVIEW zurückzugeben und LabVIEW seinerseits hat keine Möglichkeit um von der DLL zu erfahren wieviel Speicher sie denn gerne als Parameterbuffer erhalten möchte. Also muss der LabVIEW Programmierer das explizit selber tun, auf Basis der Kenntnis was die betreffende Funktion benötigt (was natürlich irgendwo dokumentiert sein muss).
Im Extremfall wird irgendwo gar kein Speicher vorab alloziert und die DLL schreibt frisch fröhlich in den nicht dafür allozierten Speicher und überschreibt irgendetwas anderes. Das kann crashen aber muss nicht immer gleich und manchmal auch gar nicht, aber überspitzt gesagt kann die Mondfase schon bewirken dass es plötzlich doch crasht. Oder der Programmierer alloziert zwar einen Buffer aber hat sich vertan in der Berechnung wieviel dass sein muss, oder hat gar nichts berechnet sondern einfach einen Wert genommen der bei seinen Tests gut funktionierte aber im echten Einsatz plötzlich zu klein sein kann.
Das zu finden ist meist eine ziemlich akribische Kleinarbeit und verlangt meistens auch ein gründliches Einlesen in die API Dokumentation der DLL und da habe ich im Moment weder die Zeit dazu noch die Lust, schon gar nicht für etwas das ich nicht selbst benötige. Sorry!