(04.03.2012 23:55 )jabami schrieb: Hallo Rolf,
im Anhang die beiden vorerst von mir erstellten VI's: PS3_CameraCount.vi und PS3_GetCameraUUID.vi. CameraCount funktioniert bei mir (ist ja auch trivial und Minimalst). An GetCameraUUID beiss ich mir wie gesagt die Zähne aus. Wie bereits zuvor beschrieben, kann ich mir auch den Pointer aus dem ersten Node nicht anzeigen lassen. Theoretisch müsste das ja möglich sein wenn der gesamte MoveBlock Teil einfach weggelassen wird. Aber bereits in einem solchen Fall bekomm ich den zuvor beschriebenen Fehler. Der Parameter für den Funktionsaufruf ist richtig. Das hab ich mehrfach überprüft. Ich hab im Anhang auch noch ein C# Beispiel angehängt das die beschriebene .dll nutzt.
Beste Grüße,
Jan
Ok das hilft! Ein paar Dinge sind hierbei erwähnenswert:
1) Das program.txt File spezifiziert keine Calling Convention und gemäss MSDN bedeutet dies für .Net Sprachen (Visual Basic, C#, C++) dass stdcall verwendet wird. Deshalb muss man das in der Call Library Node für die Funktionen dieser DLL ebenfalls so einstellen. Deshalb crashte der Aufruf der GetCameraUUID Funktion auch da der Stack korrumpiert wurde. Für die CameraCount Funktion machte es nichts aus da diese Funktion keine Parameter hat.
Achtung: Die Call Library Node für die MoveBlock Funktion muss auf cdecl bleiben, da LabVIEW alle seine Funktionen als cdecl exportiert.
2) Der erste Parameter zu MoveBlock muss als Integersized Pointer konfiguriert sein, soweit hast Du das richtig, aber Du stellst dazu auch ein dass dieser Wert als Referenz übergeben werden muss was falsch ist. Du willst nicht einen Pointer auf den Pointer an diese Funktion geben sondern direkt den Pointer den die GetCameraUUID Funktion zurückgegeben hat.
3) Der zweite Parameter zu MoveBlock sollte nicht ein Cluster mit 16 Floatingpointzahlen sein sondern einer mit 16 Bytes, und ein Byte entspricht einem U8. Alternativ kannst Du ihn auch als Array of 16 * U8, passed as Array Pointer konfigurieren, und dieses Array direkt so aus der Funktion führen. Solange Du diese GUID nicht selbst optisch interpretieren willst sondern nur verwendest um an andere Funktionen zu übergeben ist das kein Problem. Oder Du kannst das Array auch nach der Call Library Node mit der Array to Cluster Node umwandeln. Nicht vergessen auf diese Funktionen einen Rechtsklick zu machen und die Clustergrösse auf 16 einzustellen.
Mit diesen Änderungen sollte es danach gehen.