(29.08.2012 08:04 )Forti schrieb: Leider verwende ich sie nur. Es handelt sich um eine PVCAM software zur Kamerasteuerung. Ich kann euch da also leider keinen Code Zeigen. Oder meint ihr etwas anderes?
Ist der Wert den ich in meine numerische Konstante schreibe überhaupt relevant, oder sollte er das sein?
Ich habe mal meine VI als Attachment hinzugefügt.
Dies ist aus der Header Datei der DLL, und ich glaube an dieser Stelle in der VI tritt der Fehler auf:
rs_bool PV_DECL pl_exp_setup_seq (int16 hcam, uns16 exp_total,
uns16 rgn_total, rgn_const_ptr rgn_array,
int16 exp_mode, uns32 exposure_time,
uns32_ptr exp_bytes);
Im Handbuch der Kamerasoftware steht:
rs_bool pl_exp_setup(int16 hcam, uns16 exp_total, uns16 rgn_total, rgn_const_ptr rgn_array, int16 mode, uns32 exposure_time, uns32_ptr stream_size)
Ich dachte sowohl an die LabVIEW VIs als auch an die Header Files! Was steht dort drin als Deklaration für rgn_const_ptr? Die anderen Parameter sind auch alles custom types aber ich vermute (hoffe) mal dass die gewählten Namen sinngemäss sind, aber das ist immer so eine Sache mit Annahmen. Viele Programmierer haben da so ihre eigenen Ideen die manchmal ziemlich unlogisch erscheinen können.
Zudem muss der Fehler nicht unbedingt in der Funktion liegen wo es crasht, sondern kann auch davor irgendwo geschehen sein, nur stolpert vielleicht erst diese Funktion über allenfalls inkonsistente Daten.
Zum Beispiel ist der Aufruf von pl_cam_get_name() mit einem leeren String als zweiten Parameter ein garantierter Fall von direktem oder indirektem Crashprovozierer. Wenn Du eine C Funktion aufrufst kann die nicht nach Bedarf Speicher reallozieren so wie das in LabVIEW überall passiert, sondern Du musst ihr für alle Parameter genug Speicher verfügbar stellen, in den sie dann schrieben kann. Das kann am einfachsten in der CLN Konfiguration mit dem Minimum Size value für diesen Parameter, aber ich ziehe eine explizite Initialisierung im Diagramm vor mittels Initialize Array und Byte Array to String Funktion, da die Konfiguration dieses sehr wichtige Detail ziemlich gemein versteckt.
Wie gross dieser Buffer sein muss musst Du der Dokumentation entnehmen. Die Library wird intern irgend einen Maximum size verwenden für die Namen und das ist dort dokumentiert. Niemand anders kann Dir das sagen.
Selbiges Problem natürlich auch für pl_error_message()!