24.08.2011, 13:14
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?
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?