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 

Einbinden externen Code mit unbekannter Parameterstruktur



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!

17.12.2009, 08:44 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2009 08:46 von rolfk.)
Beitrag #8

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Einbinden externen Code mit unbekannter Parameterstruktur
Ich denke dass der Programmierer voll recht hat. Wo's happert sind Deine C Kenntnisse und speziell was Pointer sind. Die Funktion Int SR_API_SetupCam() schreibt zwar Informationen in die Speicherbuffer den Du als cd1 und pars1 übergibt, legt aber diese Bereiche nicht selber an. Dass muss der Aufrufer. Da Du sagst dass da Pointer drin sind ist das schon mal nichts was Du mit LabVIEW selber machen kannst.

Deine Optionen sind folgende:

1) Berechnen der Bytegrösse dieser Strukturen. Dabei auch auf Alignment achten. Alignment besagt das ein Struktureelement immer auf einem Vielfachen der kleineren der beiden Werte Elementgrösse und Alignmentsetting ist. Bei Visual C DLLs ist das Aligment default auf 8 Byte eingestellt, kann aber in den Projecteinstellungen oder mittels pragmas vor den entsprechenden Deklarationen jederzeit verändert werden. Wenn Du diese Grösse hast ein entsprechendes Array mit sovielen Elementen met Intilialize Array anlegen und diesen Funktionen übergeben. Dabei macht es nichts aus dass die Funktion eine Struktur erwartet und Du ihr ein Array übergibst. Solange nur der Speicherbereich den das Array belegt gross genug ist um die ganze Struktur abzudecken. Dass Du die Information innerhalb des Arrays nicht einfach interpretieren kannst da es nicht mit dem Strukturlayout übereinstimmt ist ja nach Deiner eigenen Aussage kein Problem. Bei allen Funktionen wo dieser Buffer übergeben werden muss, wird der entsprechende Parameter dann als Array konfiguriert und als C Array Pointer.

2) Du baust Dir einen entsprechenden Cluster in LabVIEW der genau mit der Struktur in C übereinstimmt. Auch hier musst Du auf das Alignment der Library achten. LabVIEW macht nie Alignment, also packt die Daten immer so kompakt als möglich. Das kann bedeuten dass man in den Cluster sogenannte Fillerbytes einfügen muss um die Elementgrenzen auf die selben Offsets zu kriegen wie in der C Struktur. Pointer kannst Du auf diese Weise nicht wirklich anlegen aber Du kannst sie als 32Bit Integer in 32 Bit LabVIEW oder 64Bit Integer in 64 Bit LabVIEW in den Cluster legen und auch hier natürlich auf das Alignment achten. Du siehst dann im Cluster den Wert des Pointers in der Integerzahl aber natürlich nicht den Inhalt und solange das nicht absolut mit aller Macht nötig ist lassen wir das bitteschön so, da ich vermute dass Du wahrscheinlich jetzt schon nicht mehr durchblickst. Diesen Cluster kannst Du dann an die Funktion übergeben indem Du den Parameter als Adapt to Source einstellst wonach LabVIEW einen Pointer auf diesen Cluster an die Funktion übergibt.

Dies ist so ein bischen die ausführlichste Erklärung die ich geben kann ohne die ganze Arbeit ganz für Dich zu machen (was ohne die Headerdateien sowieso nicht möglich ist). Bei Variante 1 kannst Du eventuel wegkommen mit einer groben Schätzung der Bufferlänge für die Struktur und dann noch eine Sicherheitsmarge hinzufügen um für extra Alignment Bytes Rechnung zu tragen. So oder so wirst Du dich ein wenig mit C Syntax und Datentypen, und deren Speichergrösse abgeben müssen.

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
Einbinden externen Code mit unbekannter Parameterstruktur - rolfk - 17.12.2009 08:44

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  externen Code aus Matlab/Simulink auf cRio nutzen nator 4 12.356 27.07.2016 12:24
Letzter Beitrag: nator
  Absturz und fehler bei aufrufen einer externen dll Georg26 3 6.484 18.07.2011 09:45
Letzter Beitrag: Georg26
  Gewisse Unsichehreiten beim richtigen Umgang mit Clustern in Ausblick auf externen Co Reyneke 4 6.725 14.04.2011 10:59
Letzter Beitrag: rolfk
  Externen Code (.exe) ansteuern TerraX 4 6.123 12.05.2009 09:15
Letzter Beitrag: TerraX
  Array mit unbekannter Größe übergeben Curtis Newton 6 7.978 03.06.2008 13:04
Letzter Beitrag: Curtis Newton
  DLL's und einbinden von C++Code AndreasE 13 16.628 21.07.2007 19:51
Letzter Beitrag: rolfk

Gehe zu: