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!

16.12.2009, 14:37 (Dieser Beitrag wurde zuletzt bearbeitet: 16.12.2009 14:38 von rolfk.)
Beitrag #6

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
' schrieb:Hallo und Danke erstmal.
Eigentlich stellt die Funktion der DLL schon einen speicherbereich zur Verfügung. Alle weiteren Funktionen brauchen als parameter nur "*camdesc". Dieser Parameter wird ja tatsächlich im Header der DLL beschrieben und nur von der DLL verwendet.
Reicht die Startadresse da wirklich nicht aus?
Ich habs mal mit dem u8 array probiert. Bekomme immer noch Nullwerte, wenn ich mir das Ausgangsarray betrachte. Oder liegt das nur an der falschen länge?
Andere Frage : wirklich u8? Ich dachte heut wird alles mit 32 bit adressiert.

MFG Torsten

Also da ich nicht die ganze Headerdatei sehen kann muss ich hier natürlich Vermutungen machen aber die Deklaration

int LIBCALL SR_API_SetupCam ( Camdesc* cd1, Param* pars1)

lässt halt die Vermutung aufkommen dass es zwar ein Pointer ist aber eben nicht einer der von der DLL kommt. Das darum weil Camdesc und Param ziemlich sicher struct Deklarationen sind und nicht Pointer darauf. Also so was wie:

typedef struct {
sometype elm1;
sometype elm2;
.....
} Camdesc;

und nicht:

typedef struct {
sometype elm1;
sometype elm2;
.....
} *Camdesc;

Das heisst cd1 und pars1 sind zwar Pointer auf eine Struktur aber eben nicht Pointer die aus der DLL herauskommen. In C kann man nur Werte in einem Parameter zurückgeben indem man diesen Parameter als Referenz verwendet. Wenn die DLL also den Pointer zurückgeben wollte müsste der Pointer als Referenz übergeben werden was so aussehen würde:

int LIBCALL SR_API_SetupCam ( Camdesc* *cd1, Param* *pars1)

Da das wahrscheinlich hier nicht der Fall ist muss LabVIEW den entsprechenden Buffer bereitstellen.

Was den Inhalt der Struktur angeht, da können durchaus viele Nullen drin sein. Ich weiss ja nicht was da alles drinsteht aber warum den nicht auch Nullen?

Ob das Array nun U8 oder U32 ist macht nicht soviel aus. Die Struktur selber wird eh nicht alles U8 oder U32 enthalten und Du sagtest ja selber dass Du am Inhalt des Pointers selber nicht interessiert bist. Bei Verwendung von U8 musst Du einfach soviele Elemente allozieren als die Struktur in Bytes lang ist, bei Verwendung von U32 reicht es (Länge + 3 MOD 4) Elemente anzulegen.

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
Anzeige
Antwort schreiben 


Nachrichten in diesem Thema
Einbinden externen Code mit unbekannter Parameterstruktur - rolfk - 16.12.2009 14:37

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

Gehe zu: