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

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Array mit unbekannter Größe übergeben (/Thread-Array-mit-unbekannter-Groesse-uebergeben)



Array mit unbekannter Größe übergeben - Curtis Newton - 28.05.2008 07:26

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.


Array mit unbekannter Größe übergeben - Curtis Newton - 28.05.2008 08:42

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.


Array mit unbekannter Größe übergeben - jg - 28.05.2008 08:46

' 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


Array mit unbekannter Größe übergeben - Curtis Newton - 28.05.2008 10:19

Jupp. so werde ich es machen.

Danke!


Array mit unbekannter Größe übergeben - jg - 28.05.2008 11:11

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


Array mit unbekannter Größe übergeben - rolfk - 31.05.2008 09:37

' 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


Array mit unbekannter Größe übergeben - Curtis Newton - 03.06.2008 13:04

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.