Sorry hab mich wohl zu knapp ausgedrückt.
In einem hast recht, das sind Strukturen mit Ints, Strings, Arrays, weiteren Pointern usw drin.
Der generelle Programm-Ablauf soll zb so aussehen.
Int SR_API_Init (void) //Init der Kamera-Api
Int SR_API_SetupCam ( Camdesc* cd1, Param* pars1) // instanziert 1* Camdesc und 1*Parameter mit standardwerten Rückgabe sollen Pointer auf Instanzen sein
Int SR_API_StartCamConMan (Camdesc* cd1) // versucht Verbindung zur Kamera herzustellen, die im Camdescriptor beschrieben ist
Str SR_API_GETIP (Camdesc* cd1) // Beispiel: Kontrolle der IP der Kamera
...
INT SR_API_StopCamConMan (Camdesc* cd1) // schließt Kamera-Connection
Int SR_Api_Exit(void) // beendet Api
Mehr kann ich hier leider nicht sagen, da ich den Quellcode nicht hab. Der Programmierer der Firma ist sich eigentlich sicher, dass für die Ausführung aller Kamerafunktionen der Adresspointer auf den extern angelegten Speicherbereich für Camdesc ausreichend ist. Ich kriegs nur nicht in LabVIEW hin.
' schrieb: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.