LabVIEWForum.de
Erzeugte DLL hat geänderten Datentyp (uint32->int32) - 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: Erzeugte DLL hat geänderten Datentyp (uint32->int32) (/Thread-Erzeugte-DLL-hat-geaenderten-Datentyp-uint32-int32)



Erzeugte DLL hat geänderten Datentyp (uint32->int32) - LabVIEWDompteur - 14.09.2011 09:52

Hallo LVF-User!

bin gerade dabei mich bzgl. DLLs in LabVIEW weiterzubilden. Stoße hier aber auf ein Problem, und zwar werden die Dateitypen uint32_t und uint16_t, welche in der Prototypdefinition noch richtig stehen, sobald ich die kompilierte DLL wieder in LabVIEW importiere, geändert zu int32_t und int16_t (uint8_t bleibt).

Ist jemand schonmal auf dieses Problem gestoßen und weiß wie man es behebt?

Viele Grüße,
LabVIEWDompteur


RE: Erzeugte DLL hat geänderten Datentyp (uint32->int32) - jg - 14.09.2011 11:59

Bin etwas verwirrt. Woher kommt die DLL? Irgendeine C-DLL, die du neu kompilierst?

Wenn die Header-Datei passt, dann sollte es auch beim Import über den DLL-Import-Assi klappen. Ansonsten muss man halt von Hand nacharbeiten.

Gruß, Jens


RE: Erzeugte DLL hat geänderten Datentyp (uint32->int32) - LabVIEWDompteur - 14.09.2011 12:30

Ich habe mir lediglich zum Test ein subVI geschrieben, dass zwei Zahlen die als uint32 deklariert sind addiert bzw. auf Knopfdruck subtrahiert.

Dieses subVI habe ich dann via Applicationbuilder zu einer DLL kompiliert. Danach wieder in LabVIEW via Call Function Library Node eingebunden und hier hatt die DLL eben eine andere Methodendefinition.

Im Applicationbuilder, Define Prototype steht:
uint32_t ZuDLLwerdendesVI(LVBoolean *Boolean3, uint32_t Numeric, uint32_t Numeric2)

in der erzeugten Headerdatei steht (korrekt):
uint32_t __cdecl ZuDLLwerdendesVI(LVBoolean *Boolean3, uint32_t Numeric, uint32_t Numeric2);

aber bei der Auswahl der Methode der DLL über den "Call Function Library Node":
int32_t ZuDLLwerdendesVI(uint8_t *boolean3, int32_t numeric, int32_t numeric2);

Habe ein bischen gesucht und der BUGFIX 201077 aus der Liste zu LabVIEW2010 könnte zu dem Problem passen:
201077 Application builder silently coerces exported DLL prototypes to default
Allerdings benutzte ich ja 2010 SP1, insofern hätte ich gedacht, das ist gelöst, oder ist das was anderes?


RE: Erzeugte DLL hat geänderten Datentyp (uint32->int32) - LabVIEWDompteur - 14.09.2011 14:42

Nachtrag:
Bug ist bestätigt, bzw. immernoch vorhanden in LV2010 (nur SP1?) & 2011. National Instruments ist dran.


RE: Erzeugte DLL hat geänderten Datentyp (uint32->int32) - rolfk - 14.10.2011 12:09

(14.09.2011 14:42 )LabVIEWDompteur schrieb:  Nachtrag:
Bug ist bestätigt, bzw. immernoch vorhanden in LV2010 (nur SP1?) & 2011. National Instruments ist dran.

Das ist sowieso ein recht obscures Feature. Der LabVIEW Application Builder fügt in die exportierte DLL eine Resource die die Funktionsprototypen beschreibt. Ich habe noch nie eine Standard DLL gesehen die mit etwas anderem dann LabVIEW gemacht wurde, die eine solche Typelibrary Resource enthält. Warum das existiert ist mir nicht ganz deutlich. Offensichtlich ist es ein MS Feature, das diese aber selber in ihren Compilern nicht aktiv zu unterstützen scheinen.

Wenn Du die DLL mittels Import Library Wizard auf Basis des Header Files importierst sollte es besser gehen. Bleibt natürlich die Frage, warum man in LabVIEW eine DLL macht um diese dann in LabVIEW zu importieren! Andere Entwiklungsumgebungen haben von der integrierten Typelibrary scheinbar nichts, ausser vielleicht Delphi. Könnte mir vorstellen, dass die den Import einer DLL auf Basis dieser Resource vereinfacht haben.