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 

64Bit DLL mit Wizard importieren



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!

24.08.2011, 13:14 (Dieser Beitrag wurde zuletzt bearbeitet: 24.08.2011 13:37 von pimbolie1979.)
Beitrag #1

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
64Bit DLL mit Wizard importieren
Hallo @ all,

ich habe eine DLL und das dazugehörige H-File. Mit Hilfe des DLL-Import-Wizards habe ich bis jetzt immer die DLL importiert. Dies jedoch nur unter Windwos XP (32Bit)

Jetzt benutze ich ein 64Bit Windows 7 Betriebssystem und Labview 2010 64Bit. Zudem will ich jetzt eine 64Bit DLL importieren. Hierzu verwende ich wieder den Wizard. Dann wähle ich erneut meine DLL und mein H-File und erstelle eine Bibliothek. Bis jetzt habe ich keinen Präprozessorbefehl verwendet. Das erstellen der Bibliothek erfolgte ohne Fehler. Wenn ich jedoch die Funktionen verwenden möchte erzeugte diese einen Fehlercode (ungültiges Argument).

Mir ist aufgefallen das die Datentypen immer noch 32Bit sind. Wenn ich die Datentypen durch 64Bit Datentypen manuell austausche dann bekomme ich keine Fehlermeldung mehr.

Demnach muss ich dem Wizard mitteilen das es sich um ein 64Bit Betriebssystem handelt nur weis ich leider nicht den passenden Präprozessorbefehl.


Ich poste am besten mal eine Funktion aus der DLL:


extern cudaError_t cudaMalloc(void **devPtr, size_t size);

extern cudaError_t cudaMemcpy(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind);


So viel habe ich bis jetzt in Erfahrung gebracht: Der Datentype size_t ist ein Systemspeziffiser Datentype. Jetzt ust halt die Frage wenn ich ein 64Bit Betriebssystem habe ist der Datentype auch 64Bit groß

und was ist mit void ** devPtr ????





Ich habe mal die stddef.h Datei geöffnet. Dort ist der Typedef definiert. Ich habe eine Labview 2009 32 Bit Version installiert und eine Labview 2010 64Bit Version. Jedoch finde ich im Labview 2010 verzeichnis keine stddef.h Datei sondern nur im Labview 2009 Ordner

In diesem Verzeichnis habe ich die stddef.h gefunden

C:\Program Files (x86)\National Instruments\Shared\LVDB\include\ansi


Und dies steht in der Datei drin:

#ifndef _SIZE_T_DEFINED
#define _SIZE_T_DEFINED
#ifdef _NI_mswin64_
typedef unsigned __int64 size_t;

#else
typedef unsigned int size_t;
#endif
#endif

Also muss ich den Compilerschalter _NI_mswin64_ setzen?

Warum gibt es keine stddef.h mehr unter Labview 2010?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2011, 09:32
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: 64Bit DLL mit Wizard importieren
Ich denke mal dass Du auf dem Holzweg bist. Das LVDB.exe Utility ist der LabVIEW DLL Builder. Das ist zuständig um eine DLL aus LabVIEW VIs zu bauen und ist im wesentlichen eine reduzierte LabWindwos CVI Umgebung. Der Umstand dass es in der Program Files (x86) Directory liegt gibt auch an dass es sich um die 32 Bit Variante handelt. Dass es immer noch dasselbe Utility ist in LabVIEW 2010 ist ganz einfach darum weil es scheinbar keine neue Version braucht.

Der Library Import Wizard braucht meines Wissens keine externen C Compiler sondern ist ganz in LabVIEW implementiert. Zudem werden keinerlei Header mitgeliefert, die müssen schon von Deinem System geliefert werden. Ob der Import Library Wizard voll 64 Bit kompatibel ist wirst Du bei NI Support nachfragen müssen. Grundsätzlich sollte das keine Issue sein aber Deine DLL mit Pointerreferenzen stellt sowieso eine Knacknuss dar für dieses Tool. Auch wenn es nicht crasht ist noch abzuwarten ob es wirklich gut funktioniert. Wenn Du denn Inhalt der Pointer im LabVIEW Diagram nicht ansprechen musst, kannst Du diese Referenzen in der Tat als Integer konfigurieren, aber dann würde ich Pointer sized Integer verwenden anstelle eines expliziten 32 oder 64 Bit Integers.

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
25.08.2011, 12:50
Beitrag #3

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
RE: 64Bit DLL mit Wizard importieren
Labview kenn den Typedef size_t nicht. Daher kann Labview auch keinen Datentype zuordnen. Erst wenn ich die stdlib.h und einbinde (diese lädt dann wieder die stddef.h) Dort ist der Typedef angegeben.

Wenn ich den Compilerschalter _NI_mswin64_ setze dann ist die Fehlermeldung weg und ich kann die importierte funktion nutzen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2011, 14:10
Beitrag #4

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
RE: 64Bit DLL mit Wizard importieren
Es funktioniert leider immer noch nicht. Der Import Wizard erzeugt da 32Bit Datentypen (long). Jedoch werden Quads (64Bit) benötigt. Es ist egal ob ich den Compilerschalter setze oder nicht.

Wie kann ich denn eine 64Bit DLL mit Hilfe des Import-Wizards in Labview 64 importieren?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2011, 14:38
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: 64Bit DLL mit Wizard importieren
Mit Quads gab es auch hier Probleme:
http://www.labviewforum.de/Thread-DLL-C-...w-schicken

Wenn es gar nicht anders geht, dann musst du jede Funktion von Hand editieren und die Übergabeparameter selber anpassen.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2011, 16:42
Beitrag #6

sfk010477 Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Aug 2011

6i bis 2011
2000
EN



RE: 64Bit DLL mit Wizard importieren
(25.08.2011 14:10 )pimbolie1979 schrieb:  Es funktioniert leider immer noch nicht. Der Import Wizard erzeugt da 32Bit Datentypen (long). Jedoch werden Quads (64Bit) benötigt. Es ist egal ob ich den Compilerschalter setze oder nicht.

Wie kann ich denn eine 64Bit DLL mit Hilfe des Import-Wizards in Labview 64 importieren?


Hallo zusammen,


kleine Workaround-Lösung für alle: Im Header-File der zu importierenden DLL alle VOID* durch einen sonst ungenutzten Typen wie z.B. INT8 ersetzen und die DLL dann wie gewohnt importieren. Danach dann angefügtes kleines Scripting-VI über das Verzeichnis laufen lassen.

Das VI schnappt sich jedes VI aus dem gewählten Ordner, sucht darin alle numerischen Controls/Indicators deren Datentyp I8 ist und ändert ihn in U64 um, bevor das VI dann unter dem gleichen Namen wieder abgespeichert wird.

Viel Spaß damit,
Sebastian


Angehängte Datei(en)
2010 .vi  Convert_I8_to_U64.vi (Größe: 17,75 KB / Downloads: 203)

2009 .vi  Convert_I8_to_U64_v9.vi (Größe: 10,82 KB / Downloads: 198)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.10.2011, 12:36
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: 64Bit DLL mit Wizard importieren
(25.08.2011 16:42 )sfk010477 schrieb:  
(25.08.2011 14:10 )pimbolie1979 schrieb:  Es funktioniert leider immer noch nicht. Der Import Wizard erzeugt da 32Bit Datentypen (long). Jedoch werden Quads (64Bit) benötigt. Es ist egal ob ich den Compilerschalter setze oder nicht.

Wie kann ich denn eine 64Bit DLL mit Hilfe des Import-Wizards in Labview 64 importieren?


Hallo zusammen,


kleine Workaround-Lösung für alle: Im Header-File der zu importierenden DLL alle VOID* durch einen sonst ungenutzten Typen wie z.B. INT8 ersetzen und die DLL dann wie gewohnt importieren. Danach dann angefügtes kleines Scripting-VI über das Verzeichnis laufen lassen.

Das VI schnappt sich jedes VI aus dem gewählten Ordner, sucht darin alle numerischen Controls/Indicators deren Datentyp I8 ist und ändert ihn in U64 um, bevor das VI dann unter dem gleichen Namen wieder abgespeichert wird.

Viel Spaß damit,
Sebastian

Wenn Du schon die Header Datei anpasst warum nicht gleich ein int64 davon machen und diesen als long long am Anfang deklarieren? Würde das Scripting Tool sparen.

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 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  dll übers Netzwerk importieren wrock 1 4.619 15.02.2015 22:46
Letzter Beitrag: teegee
  DLL Datein in LabVIEW 7.1 importieren infester 3 4.418 14.08.2008 09:14
Letzter Beitrag: rolfk
  Importieren der Microsoft Foundation Class(MFC) Bibliothek? Swift 2 4.647 20.06.2008 10:52
Letzter Beitrag: Swift
  dll importieren mobadig 4 5.900 10.04.2008 18:28
Letzter Beitrag: jg

Gehe zu: