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 

DLL Import externe Struktur in Header bekommen



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!

13.09.2016, 22:17
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.308
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL Import externe Struktur in Header bekommen
(07.09.2016 23:11 )hansi9990 schrieb:  Meinst du das ich einfach den ganzen struct strHidDevice als Pointersized Integer deklarieren, so wie in Bild strHidDevice.jpg?

Nein, nicht ganz so! Nicht vorzeichebehafteter 64-bit Integer sondern vorzeichenbehafteter pointersized (oder was das auf Deutsch heissen mag) Integer. Und nicht als Zeiger auf Wert sondern direkt.

Und vergiss es um diese Struktur als LabVIEW Cluster erstellen zu wollen, da ist ein 8192 byte grosser Buffer drin, so dass die ganze Struktur mindestens etwas 9000 Byte gross wird. Das würde einen Megaprontosaurus-Cluster geben.

Stattdessen musst Du diese Struktur erst im Speicher anlegen, etwa durch aufrufen der LabVIEW Managerfunktion void* DSNewPClr(int32_t size) mittels einer weiteren Call Library Node. Als size gibst Du dort eine Zahl die gross genug ist. Um auch Für 64-Bit korrekt zu funktionieren müsste das 8192 + 96 Bytes sein. Den Zeiger den Du davon zurückbekommst, verwendest Du dann bei allen anderen Funktionen als strHidDevice* Parameter. Nicht vergessen zuerst die Funktion HID_Init() darauf auszuführen. Und am Ende wenn Du diesen Speicher nicht mehr benötigst, ganz nett aufräumen durch Aufruf von DSDisposePtr(void *ptr).

Wenn Dir die LabVIEW Manager Funktionen suspekt erscheinen, kannst Du stattdessen auch die Windows API Funktionen void* CoTaskMemAlloc(SIZE_T size) und CoTaskMemFree((void* ptr), beide in Ole32.dll.

SIZE_T ist ein Datentyp der ein 32-Bit unsigned integer unter 32 bit ist, und ein 64-Bit unsigned Integer in 64-Bit. In LabVIEW musst Du das als Vorzeichenloser Pointersized Integer konfigurieren, und als Wert, nicht als Zeiger auf Wert.

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
Antwort schreiben 


Nachrichten in diesem Thema
RE: DLL Import externe Struktur in Header bekommen - rolfk - 13.09.2016 22:17

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  USB Relay DLL import hansi9990 3 10.481 02.09.2019 09:15
Letzter Beitrag: hansi9990
  Aufruf externe DLL Fehler 1097 Lars_Tragl 1 9.714 11.08.2016 16:13
Letzter Beitrag: Freddy
  externe DLL verstehen sarah.bla 7 14.142 05.07.2016 08:19
Letzter Beitrag: sarah.bla
  Fehlende externe Funktion galilio 4 13.450 28.04.2016 12:42
Letzter Beitrag: rolfk
  aus einem Library Import Installer machen galilio 5 13.375 04.04.2016 09:32
Letzter Beitrag: galilio
  Labview Import / DLL debuggen galilio 36 55.234 10.11.2015 21:42
Letzter Beitrag: rolfk

Gehe zu: