LabVIEWForum.de
Umsetzen Cpp Definition aud DLL - 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: Umsetzen Cpp Definition aud DLL (/Thread-Umsetzen-Cpp-Definition-aud-DLL)



Umsetzen Cpp Definition aud DLL - Helden - 27.06.2012 08:00

Hallo Forum,

ich lege mir seit einigen Tagen die Karten mit einer Cpp Definition für einen DLL Aufruf.

Der komplette DLL Aufruf lautet:
int SCEnable(const unsigned long Mode, const int RecallLastSettings, const char* const pReaderName, const SC_READER_HANDLE hSCReader);

Wie muss ich nun unter LabView2011 den Parameter
const char* const pReaderName
definieren?

Ich bin für jeden Hinweis dankbar.

Gruß Helden

Bahn


RE: Umsetzen Cpp Definition aud DLL - rolfk - 27.06.2012 08:39

(27.06.2012 08:00 )Helden schrieb:  Hallo Forum,

ich lege mir seit einigen Tagen die Karten mit einer Cpp Definition für einen DLL Aufruf.

Der komplette DLL Aufruf lautet:
int SCEnable(const unsigned long Mode, const int RecallLastSettings, const char* const pReaderName, const SC_READER_HANDLE hSCReader);

Wie muss ich nun unter LabView2011 den Parameter
const char* const pReaderName
definieren?

Seit einigen Tagen? Vielleicht solltest Du doch erst einen Grundkurs C Programmierung folgen. Big Grin

const char* besagt ganz einfach dass es sich um einen C String Parameter handelt. Also konfigurierst Du den entsprechenden Parameter als String und dann als Untertyp "C String Pointer", et voilá.

Das const sagt dem C Compiler dass die Funktion den String NICHT verändern darf. Wenn man in C/C++ eine Funktion kompiliert die einen solchen Parameter aufweist, kann man diesen nicht versehentlich an Funktionen übergeben die den Stringbuffer doch verändern. Für den Aufruf von LabVIEW aus ist dieser Umstand aber im Wesentlichen unwichtig, ausser dass man sicher weiss, dass es sich hier ausschliesslich um einen Eingangsparameter handeln kann, und man deshalb in LabVIEW nicht extra darauf achten muss um einen längeren Buffer zu allozieren für eine eventuelle Antwort die die DLL Funktion in diesen Buffer schreiben will.


RE: Umsetzen Cpp Definition aud DLL - Helden - 28.06.2012 12:32

Hallo Rolfk,
vielen Dank für Deine Antwort. Das mit C ist auch schon eine ganze Weile her.
Nun habe ich noch das Problem, dass die DLL einen Pointer auf einen Wertebereich zurück gibt.
Kannst Du mir sagen, ob dieses Problem in LV2011 gelöst wurde oder ist das mir LV immer noch nicht möglich?

Viele Grüße

Helden


RE: Umsetzen Cpp Definition aud DLL - jg - 28.06.2012 13:38

(28.06.2012 12:32 )Helden schrieb:  Nun habe ich noch das Problem, dass die DLL einen Pointer auf einen Wertebereich zurück gibt.
Kannst Du mir sagen, ob dieses Problem in LV2011 gelöst wurde oder ist das mir LV immer noch nicht möglich?
Wer behauptet, dass das nicht mit LV möglich ist? Das geht doch schon ewig mit dem wenig bekannten "MoveBlock".

Und hier gibt es sogar ein paar VIs dafür:
https://decibel.ni.com/content/docs/DOC-9091

Gruß, Jens


RE: Umsetzen Cpp Definition auf DLL - Helden - 04.07.2012 12:21

Hallo,
vielen Dank. Es funktioniert nun. Der Hinweis war super.

Eine Frage habe ich noch.
Ich habe hier unterschiedliche PCs mit WIN7 64bit und WIN7 32bit.
Für beide erstelle ich die Software mit Labview 2011 32bit.

Wenn ich nun DLL Aufrufe habe, die Datenwerte wie folgt definieren
1) const unsigned long
2) const unsigned int
3) const unsigned short

Welche Bitanzahl wähle ich dann für die unterschiedlichen Betriebssysteme aus?
WIN7 64bit:
1)
2)
3)

WIN7 32bit:
1)
2)
3)

Vielen Dank für die Hilfe.


RE: Umsetzen Cpp Definition auf DLL - rolfk - 04.07.2012 14:40

(04.07.2012 12:21 )Helden schrieb:  Hallo,
vielen Dank. Es funktioniert nun. Der Hinweis war super.

Eine Frage habe ich noch.
Ich habe hier unterschiedliche PCs mit WIN7 64bit und WIN7 32bit.
Für beide erstelle ich die Software mit Labview 2011 32bit.

Wenn ich nun DLL Aufrufe habe, die Datenwerte wie folgt definieren
1) const unsigned long
2) const unsigned int
3) const unsigned short

Welche Bitanzahl wähle ich dann für die unterschiedlichen Betriebssysteme aus?
WIN7 64bit:
1)
2)
3)

WIN7 32bit:
1)
2)
3)

Vielen Dank für die Hilfe.
Da Du LabVIEW 32 Bit verwendest muss Deine DLL auch 32 Bit sein und damit entfällt die erste Version ganz. Eine 32 Bit Applikation läuft unter 64 Bit Windows unter WOW in einem 32 Bit Environment und kann auch nur mit 32 Bit DLLs kopmmunizieren.

Zudem ist der einzige potentielle Unterschied long und das ist gerade unter Windows 64 Bit noch immer 32 Bit, ganz anders als bei den meisten Unix Varianten die dafür einen 64 Bit Integer benützen.


RE: Umsetzen Cpp Definition aud DLL - Helden - 05.07.2012 08:34

Hallo Rolf,

damit habe ich folgende Tabelle, die ich übersetzen muss?

1) const unsigned long => int 32bit
2) const unsigned int => int 32bit
3) const unsigned short => int 8bit

Viele Grüße

Helden


RE: Umsetzen Cpp Definition aud DLL - rolfk - 05.07.2012 09:09

(05.07.2012 08:34 )Helden schrieb:  Hallo Rolf,

damit habe ich folgende Tabelle, die ich übersetzen muss?

1) const unsigned long => int 32bit
2) const unsigned int => int 32bit
3) const unsigned short => int 8bit

Viele Grüße

Helden

Beinahe! short ist 16 Bit, char ist 8 Bit.

Dabei ist zu erwähnen dass dies nirgendwo im C Standard festgeschrieben ist. C sagt alleine dass sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) ist. Es ist damit denkbar dass es C Compiler gibt die alle diese Typen als 8 Bit definieren (oder auch 7 Bit).

Und obwohl das Memorytechnisch keinen Einfluss hat, solltest Du auch auf unsigned achten. Das kann numerisch einen ziemlichen Unterschied machen.