LabVIEWForum.de
Header nicht LV Kompatibel? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Header nicht LV Kompatibel? (/Thread-Header-nicht-LV-Kompatibel)



Header nicht LV Kompatibel? - hansi9990 - 26.04.2015 07:29

Hallo zusammen

Zunächt erst mal bitte verzeiht meine Unwissenheit denn ich bin nicht ganz so tief im erstellen von DLL Projekten in LV zudem kommt hinzu das ich von C++ soviel Ahnung habe wie ein Eskimo vom Heu machen Wink es wäre dennoch schön wenn mir hier jemand zumindes ein kleines bisschen helfen könnte Smile
Mein Problem ist das ich eine DLL besitze (nicht direkt ich Wink und diese in LV 2014 importieren möchte, eine Header Datei dazu habe ich auch jedoch scheint diese nicht zu passen denn nach dem Import habe ich nur verschieden Funktionen mit je einem leeren Eingangs- und Ausgangscluster, auch wenn ich keine Ahnung habe vermute ich einfach das in der Headerdatei die Typdefinitionen fehlen oder zumindest nicht in der korrekten Schreibweise eingetragen sind.
Ich habe mal ein Kopie der Headerdatei hier angehängt, scheinbar werden Dateien mit einer .h Endung nicht angenommen datum habe ich sie in .txt umbenannt.
Kann mir jemand helfen oder sagen ob es mit diese Datei überhaupt möglich ist die dazugehörige DLL in LV zu importieren?

Mercy


RE: Header nicht LV Kompatibel? - rolfk - 27.04.2015 09:58

(26.04.2015 07:29 )hansi9990 schrieb:  Hallo zusammen

Zunächt erst mal bitte verzeiht meine Unwissenheit denn ich bin nicht ganz so tief im erstellen von DLL Projekten in LV zudem kommt hinzu das ich von C++ soviel Ahnung habe wie ein Eskimo vom Heu machen Wink es wäre dennoch schön wenn mir hier jemand zumindes ein kleines bisschen helfen könnte Smile
Mein Problem ist das ich eine DLL besitze (nicht direkt ich Wink und diese in LV 2014 importieren möchte, eine Header Datei dazu habe ich auch jedoch scheint diese nicht zu passen denn nach dem Import habe ich nur verschieden Funktionen mit je einem leeren Eingangs- und Ausgangscluster, auch wenn ich keine Ahnung habe vermute ich einfach das in der Headerdatei die Typdefinitionen fehlen oder zumindest nicht in der korrekten Schreibweise eingetragen sind.
Ich habe mal ein Kopie der Headerdatei hier angehängt, scheinbar werden Dateien mit einer .h Endung nicht angenommen datum habe ich sie in .txt umbenannt.
Kann mir jemand helfen oder sagen ob es mit diese Datei überhaupt möglich ist die dazugehörige DLL in LV zu importieren?

Nicht möglich ist zuviel gesagt aber nicht einfach. Der Grund ist sogar zweifach. Erstens benützt dieser Header Definitionen des WinAPIs. Ohne den Pfad der Microsoft Windows SDK Headers in einer der extra Einstellungen hat er einfach nicht genug Informationen um diesen Header zu parsen. Allerdings sind die Windows SDK Headers so umfangreich dass er da meist früher oder später über allerlei bedingte Definitionen stolpert da Du auch einige Definitionen mitgeben musst die normal vom C Compiler automatisch definiert werden.

Daher ist es grundsätzlich einfacher um bei relativ einfachen Headern wie diesem die entsprechenden defines selber in das entsprechende Feld einzuführen.

Etwas in dieser Richtung:

#define HANDLE void*
#define BOOL int
#define UINT unsigned int
#define WORD unsigned short
#define DWORD unsigned long
#define BYTE unsigned char
#define OVERLAPPED void*
#define ULONG unsigned long
#define USHORT unsigned short
#define HDEVNOTIFY HANDLE

Das sollte glaube ich alle Datentypen im Header abdecken.

Extra Komplikation hier dürfte aber sein das HANDLE ja ein Pointer ist und der Size davon abhängt von der Bitness in LabVIEW. LabVIEW unterstützt zwar einen Pointer sized Datentyp in der Call Library Node als direkter Parameter aber nicht als native Datentype im Diagram. Wenn Du Deine Library sowohl für 32 Bit als auch 64 Bit LabVIEW machen willst musst Du die HANDLE und OVERLAPPED Elemente händisch auf jeweils einen 32 oder 64 Bit Integer einstellen und je nach Platform eine Call Library Node mit entsprechend verbundenem Cluster programmieren (Conditional Compile Structur).


RE: Header nicht LV Kompatibel? - hansi9990 - 27.04.2015 19:17

Meinst du das in etwa so wie im Anhang hier?
Würde das dann auch genügen wenn ich die DLL nur für 32Bit haben möchte?


RE: Header nicht LV Kompatibel? - rolfk - 28.04.2015 09:59

(27.04.2015 19:17 )hansi9990 schrieb:  Meinst du das in etwa so wie im Anhang hier?
Würde das dann auch genügen wenn ich die DLL nur für 32Bit haben möchte?

Das ist eine Möglichkeit. Eigentlich hat der Import Library Wizard extra Einstellungselemente. In einem davon kannst Du auch extra defines festlegen, die beispielsweise normalerweise vom C Compiler festgelegt werden. Aber man kann das auch "missbrauchen" um einige Datentypen zu definieren die ansonsten in externen Headern festgelegt würden. Sofern Du nur die 32 Bit DLL ansprichst und dies von der 32 Bit Version von LabVIEW aus machst sollte das in etwa genügen.


RE: Header nicht LV Kompatibel? - hansi9990 - 28.04.2015 18:01

Hallo Rolf

Danke für die Informationen, leider funktioniert es nicht so wie ich es mir vorstelle, wenn ich es über die Header Datei mache dann hängt der Import Wizard bie "VI erzeugen: HID Close.vi", da steht er schon seit über einer Stunde, da ich mir nicht vorstellen kann das dies normal ist habe ich Labview jetzt über den Taskmanager abgewürgt, anders lies er sich nicht beenden . Wie man es direkt im Wizard definiert weiß ich nicht, da gibt es zwar eine Möglichkeit mit dem Präprozessor aber ich habe keinen Schimmer wie man die defines dort hinein bekommt und ob es dann funktioniert.


RE: Header nicht LV Kompatibel? - hansi9990 - 02.05.2015 19:38

Hallo

Hat evtl. jemand eine Idee oder eine Vermutung warum sich der Import Wizzard aufhängt wenn ich den Header wie von Rolf empfohlen überarbeite?

PS: Ist schon seltsam, wenn man es mehrfach versucht und im Wizzard mal etwas vor und zurück springt dann wird die Erstellung durchgeführt, warum das so ist kann ich mir einfach nicht erklären.