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!

06.09.2016, 22:21 (Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2016 22:28 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL Import externe Struktur in Header bekommen
(03.09.2016 08:56 )hansi9990 schrieb:  Hi

Ich vesuche schon einige Zeit eine DLL in LabView zu importieren was mir zu Teil auch schon gelungen ist, einige Dinge konnte ich erfolgreich testen, nur habe ich ein Problem mit einem define (OVERLAPPED) das scheinbar nochmal eine externe Funktion ist.

Ich habe aber keine Ahnung wie ich das in das .h File bekomme damit mir der DLL Import Assistent mir die DLL korrekt erstellt.
Ich habe in den Anhang ein Bild mit dem Aufbau der DLL angehängt, das Header File habe ich umbenannt mit .txt Erweiterung da hier scheinbar keine .h Dateien im Anhang zugelassen sind.
Hat evtl. jemand eine Ahnung wie ich dieses OVERLAPPED in das Header bekomme um die DLL korrekt importieren zu können?

OVERLAPPED ist keine externe Funktion sondern ein struct von den Windows low level Systemtreibern wenn diese asynchon aufgerufen werden. Aber dieses API ist definitive etwas obskur in dieser Hinsicht.

Die Windows Deklaration sieht als folgt aus:

Code:
typedef struct _OVERLAPPED {
  ULONG_PTR Internal;
  ULONG_PTR InternalHigh;
  union {
    struct {
      DWORD Offset;
      DWORD OffsetHigh;
    };
    PVOID  Pointer;
  };
  HANDLE    hEvent;
} OVERLAPPED, *LPOVERLAPPED;

Ich gehe mal davon aus dass Du auf die Elemente sowohl in der struct strHidDevice als auch in diesen OVERLAPPED überhaupt nicht direkt zugreifen musst. Dann könnte man es einfach als ein Pointersized Integer behandeln.

Und selbst wenn Du diese struct in den Header mit aufnimmst kann der DLL Import Wizard NICHT den korrekten Code erzeugen da es ziemlich undeutlich ist wer den Speicher für diese OVERLAPPED Strukturen anlegen soll. Zudem enthält diese Struktur HANDLES und eben diese Pointers zu OVERLAPPED und das bewirkt, dass die entsprechenden Strukturen qua Memorylayout völlig verschieden werden, je nachdem ob man dies für 32 bit oder 64 bit versucht zu machen.

Am einfachsten wäre halt einfach um eine weitere DLL in C zu machen die diese Struktur anlegt und korrekt initialisiert und dann einfach den Zeiger darauf als Pointersized Integer zurückgibt und Du diesen dann auch entsprechend an jede Funktion übergibts. Eine zweite Funktion in dieser Hilfs-DLL gibt den Speicher für diese Struktur wieder frei. Dummerweise hätte der ursprüngliche DLL Programmierer genau das so machen können indem die HANDLE HID_Init() Funktion genau diesen Pointer einfach als HANDLE oder void* zurückgeben könnte und alle Funktionen würden dann auch ein HANDLE oder void* als ersten Parameter erhalten. Daneben hätte noch eine weitere Funktion exportiert werden müssen wie HID_Free(HANDLE hid) oder so die den entsprechenden Speicher wieder dealloziert. Das wäre korrekte Programmierung gewesen.

Das alles in LabVIEW selber zu machen versuchen wird sehr viel Handarbeit erfordern (der Import Wizard kann das nicht) und Zeigerarithmetik und 32 bit/64 bit Gegrumschel in einem LabVIEW Diagram ist hässlich, kaum zu warten auf längere Dauer da nur extrem wenig Leute so was auf LabVIEW Niveau überhaupt machen können und ein C Programmierer der dies begreifen könnte meist keinerlei Kenntnisse auf LabVIEW Gebiet hat und Dir oder wer es dann auch eventuel modifizieren oder debuggen muss, nicht helfen kann und will.

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: DLL Import externe Struktur in Header bekommen - rolfk - 06.09.2016 22:21

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

Gehe zu: