' schrieb:Ein LabVIEW memory handle für u16 sieht aber so aus:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
struct {
int32 num;
uInt16 elm[0];
} **UInt16Handle;
</div>
und der entsprechende Code um das anzulegen dann:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
UInt16Handle ArrayMemoryHdl;
ArrayMemoryHdl = (UInt16Handle)DSNewHClr(sizeof(int32) + sizeof(uInt16)*81920);
</div>
Ja ich habe es vorher so definiert:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>typedef struct {
int32 dimSize;
uInt16 value[0];
} Array;
typedef Array **ArrayHdl;</div>
Hätte ich vll. dazuschreiben sollen.
' schrieb:Das wird dann entsprechend:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
MoveBlock(Datenarray, (*ArrayMemoryHdl)->elm, sizeof(uInt16)*81920);
(*ArrayMemoryHdl)->num = 81920;
</div>
Wär ich jetzt mal nicht ganz sicher ob das denn der Pointer auf das ArrayHandle sein soll oder nur das Handle selber. Natürlich muss die entsprechende UserEvent Refnum nur dereferenziert werden wenn Du sie "by reference" an deine Funktion übergeben hast und muss diese als Datenelement ein 1D Array of uInt16 haben.
Tra ra! Das stimmt mit fast 100% Wahrscheinlichkeit nicht! Du hast das Handle mit PostLVUserData an LabVIEW übergeben und von da an managed LabVIEW das weiter. Ich habe noch nie Handles mit PostLVUserData verarbeitet aber die Art und Weise wie die Speicherverwaltung in LabVIEW funktioniert lässt mich schwer vermuten dass PostLVUserData alle variable sized Datenelemente ganz einfach erbt.
Nicht verwunderlich wenn Du LabVIEW einen Datentyp gibst der so einfach nicht stimmt.
Rolf Kalbermatter
Vielen Dank. Scheine ja schon ein paar Fehler gemacht zu haben.
Also wenn ich dich richtig verstadnen habe brauche ich den Speicher gar nicht mehr freigeben, da sich LV nach der Übergabe darum kümmert?
Danke nochmal.