LabVIEWForum.de - Array mit unbekannter Größe übergeben

LabVIEWForum.de

Normale Version: Array mit unbekannter Größe übergeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe eine Funktion in einer dll, die sieht grundlegend so aus:
int dllfunc(short *dst, int widht, int height)
Die Funktion allokiert den Speicher und gibt dessen Größe zurück. Diese Funktion kann man ja so in LabVIEW nicht verwenden. Ich könnt sie aber umschreiben. Aber wie mach ich es am besten? width und height kenne ich vor Aufruf der Funktion nicht (könnte ich aber zur Not ermitteln). Also vorher das Array erstellen und dann an die Funktion übergeben? Wie macht man sowas?

Ich wäre einfach über einen Hinweis, wie man da am besten herangeht, dankbar.

C.
Ich habe jetzt bei NI ein Beispiel gefunden:

http://zone.ni.com/devzone/cda/epd/p/id/2242

So scheints zu gehen. Hier wird MoveBlock benutzt. Die löschen aber am Ende den durch die DLL allokierten Speicher nicht. Das ist ja unsauber. Aber mit dem Beispiel werde ich es wohl hinkriegen.

C.
' schrieb:Ich habe jetzt bei NI ein Beispiel gefunden:

http://zone.ni.com/devzone/cda/epd/p/id/2242

So scheints zu gehen. Hier wird MoveBlock benutzt. Die löschen aber am Ende den durch die DLL allokierten Speicher nicht. Das ist ja unsauber. Aber mit dem Beispiel werde ich es wohl hinkriegen.

C.
MoveBlock findest du auch hier im Forum.

UND:

Wenn die DLL den Speicher alloziert, dann muss sie ihn auch freigeben. (Gibt es dafür nicht einen Aufruf in deiner DLL?). Das kann die LV-Speicherverwaltung nicht leisten.

MfG, Jens
Jupp. so werde ich es machen.

Danke!
Nachtrag: Wenn du es andersherum machen willst (i.e. LV stellt Array bereit und du übergibst per per Pointer), dann kannst du per "Initialize Array" ein Array passender Größe vordefinieren, dass du dann an die DLL übergibst. Oder ein FP-Control per Resize-Array auf richtige Größe bringen und übergeben.

MfG, Jens
' schrieb:Hallo,

ich habe eine Funktion in einer dll, die sieht grundlegend so aus:
int dllfunc(short *dst, int widht, int height)
Die Funktion allokiert den Speicher und gibt dessen Größe zurück. Diese Funktion kann man ja so in LabVIEW nicht verwenden. Ich könnt sie aber umschreiben. Aber wie mach ich es am besten? width und height kenne ich vor Aufruf der Funktion nicht (könnte ich aber zur Not ermitteln). Also vorher das Array erstellen und dann an die Funktion übergeben? Wie macht man sowas?

Ich wäre einfach über einen Hinweis, wie man da am besten herangeht, dankbar.

C.

Also wie gibt die DLL hier den Speicher zurück? Ich sehe keinen Parameter wo die DLL den allozierten Speicher zurückgeben könnte.

Rolf Kalbermatter
Na ich habe einfach noch eine Funktion geschrieben:
void __stdcall CleanMemory(short *p_sData);
Einziges Problem war noch, dass der Datentyp Uint32 ist (also ein 32-bitiger Zeiger), der dann immer übergeben wird.

C.
Referenz-URLs