INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

UUID als Datentyp für eine DLL erstellen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

05.03.2012, 20:14 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2012 20:17 von rolfk.)
Beitrag #14

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: UUID als Datentyp für eine DLL erstellen
(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.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
RE: UUID als Datentyp für eine DLL erstellen - rolfk - 05.03.2012 20:14

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Variant Datentyp bei C++ dll BastiFantasti 1 5.625 10.02.2012 21:30
Letzter Beitrag: rolfk
  Erzeugte DLL hat geänderten Datentyp (uint32->int32) LabVIEWDompteur 4 6.589 14.10.2011 12:09
Letzter Beitrag: rolfk
  Datentyp HANDLE, PVOID weschi 7 11.168 12.06.2007 14:14
Letzter Beitrag: rolfk

Gehe zu: