(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 es wäre dennoch schön wenn mir hier jemand zumindes ein kleines bisschen helfen könnte
Mein Problem ist das ich eine DLL besitze (nicht direkt ich 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).