22.04.2008, 12:48
Hallo Community,
ich bin dabei einen funktionierenden C-Code für CIN in eine DLL umzustricken. Soweit funktioniert das auch recht schön. Allerdings gibt es bei dem wichtigsten Teil des Skriptes ein Problem. Ich kann die gewonnenen Kameradaten nicht an LabVIEW übergeben. Ich verwende für die Datenaufnahme die Matrox Imaging Library. Dazu dürftet ihr in diesem Forum schon den ein oder anderen Eintrag von mir finden
Ich grabbe also Bilder von einer Kamera und speichere diese in einen MIL-Puffer. Nun bietet mir MIL die Möglichkeit die Daten des MIL Arrays in ein eigens angelegtes Array zu kopieren. Die Funktion sieht also folgendermaßen aus:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>MbufGet2d(MilImageBuffer, 0, 0, SizeX, SizeY, &((**Array).Numeric[0])) </div>
0 steht hier für Offset (in X- und Y-Richtung)
SizeX, SizeY = Auflösung
Zum Schluß wird ein Pointer auf das Zielarray erwartet. Diese Zeile funktioniert innerhalb der CIN, aber in der DLL erzeugt sie folgende Fehlermeldung:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>Unhandled exception at 0x01225BAE in LabVIEW.exe: 0xC0000005:
Access violation reading location 0x1xxxxxxx</div>
Meine Vermutung ist das ich die Array-Initialisierung nicht korrekt durchführe. Innerhalb der CIN habe ich dafür NumericArrayResize genutzt. Innerhalb der DLL mache ich es so:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>(*Array)->dimSizes[0] = SizeY; //Rows
(*Array)->dimSizes[1] = SizelX; //Cols</div>
Wenn ich diese Codezeilen ausführe wird meine Arraygröße auf SizeY und SizeX innerhalb von LabVIEW erweitert. Ich glaube trotzdem das hier mein Problem liegt. Für Hilfestellung bin ich sehr Dankbar.
ich bin dabei einen funktionierenden C-Code für CIN in eine DLL umzustricken. Soweit funktioniert das auch recht schön. Allerdings gibt es bei dem wichtigsten Teil des Skriptes ein Problem. Ich kann die gewonnenen Kameradaten nicht an LabVIEW übergeben. Ich verwende für die Datenaufnahme die Matrox Imaging Library. Dazu dürftet ihr in diesem Forum schon den ein oder anderen Eintrag von mir finden
Ich grabbe also Bilder von einer Kamera und speichere diese in einen MIL-Puffer. Nun bietet mir MIL die Möglichkeit die Daten des MIL Arrays in ein eigens angelegtes Array zu kopieren. Die Funktion sieht also folgendermaßen aus:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>MbufGet2d(MilImageBuffer, 0, 0, SizeX, SizeY, &((**Array).Numeric[0])) </div>
0 steht hier für Offset (in X- und Y-Richtung)
SizeX, SizeY = Auflösung
Zum Schluß wird ein Pointer auf das Zielarray erwartet. Diese Zeile funktioniert innerhalb der CIN, aber in der DLL erzeugt sie folgende Fehlermeldung:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>Unhandled exception at 0x01225BAE in LabVIEW.exe: 0xC0000005:
Access violation reading location 0x1xxxxxxx</div>
Meine Vermutung ist das ich die Array-Initialisierung nicht korrekt durchführe. Innerhalb der CIN habe ich dafür NumericArrayResize genutzt. Innerhalb der DLL mache ich es so:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>(*Array)->dimSizes[0] = SizeY; //Rows
(*Array)->dimSizes[1] = SizelX; //Cols</div>
Wenn ich diese Codezeilen ausführe wird meine Arraygröße auf SizeY und SizeX innerhalb von LabVIEW erweitert. Ich glaube trotzdem das hier mein Problem liegt. Für Hilfestellung bin ich sehr Dankbar.