' 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.