INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Array initalisieren über DLL Funktion



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

29.08.2012, 09:53 (Dieser Beitrag wurde zuletzt bearbeitet: 29.08.2012 10:03 von rolfk.)
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Array initalisieren über DLL Funktion
(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()!

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
RE: Array initalisieren über DLL Funktion - rolfk - 29.08.2012 09:53

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Array Elemnte von externer Funktion verbinden Heili 3 4.889 12.11.2010 13:54
Letzter Beitrag: Lucki
  Über externen Code Interface Array zurückbekommen? dr.smirnoff 7 7.472 13.05.2005 10:32
Letzter Beitrag: didierj

Gehe zu: