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 

Dll erstellen - void* als Funktion-Ausgabewert



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!

15.05.2014, 08:19
Beitrag #1

Wujaszek Offline
LVF-Neueinsteiger


Beiträge: 1
Registriert seit: May 2014

2013
2000
DE



Dll erstellen - void* als Funktion-Ausgabewert
Hallo,

ich möchte meinem LabView-Code in dll packen. Das dll soll von externen Programm als plugin
aufgerufen werden. Die Schnittstelle ist fest definiert, und ich brauche in meinem dll u.a. die
Funktion:

void* getdata(int* size)

Leider geht bei Prototyp-Konfiguration nicht void* als Ausgabewert.
Mögliche Lösungen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.05.2014, 08:43 (Dieser Beitrag wurde zuletzt bearbeitet: 15.05.2014 08:47 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.470
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Dll erstellen - void* als Funktion-Ausgabewert
Hallo Wujaszek,

Zitat:Leider geht bei Prototyp-Konfiguration nicht void* als Ausgabewert.
Mögliche Lösungen?
Die übliche Vorgehensweise ist die Rückgabe eines Fehlercodes. So hat man immer einen I32/U32-Rückgabewert! Ob man den jetzt auch auswertet oder ob dieser überhaupt sinnvolle Werte enthalten muss, steht auf einem anderen Blatt…

Habe gerade nochmal "void*" nachgelesen:
Gib doch einfach ein Array of U8 zurück. Das ist typisiert, kann aber auch alles mögliche enthalten…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.05.2014, 10:17 (Dieser Beitrag wurde zuletzt bearbeitet: 15.05.2014 10:23 von rolfk.)
Beitrag #3

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Dll erstellen - void* als Funktion-Ausgabewert
(15.05.2014 08:19 )Wujaszek schrieb:  Hallo,

ich möchte meinem LabView-Code in dll packen. Das dll soll von externen Programm als plugin
aufgerufen werden. Die Schnittstelle ist fest definiert, und ich brauche in meinem dll u.a. die
Funktion:

void* getdata(int* size)

Leider geht bei Prototyp-Konfiguration nicht void* als Ausgabewert.
Mögliche Lösungen?

Das musst Du als pointer-sized Integer konfigurieren. Ich nehme an dass in *size nach dem Aufruf der Funktion dann die Länge des Buffers angegeben ist (in Bytes, Words, Longs, Birnen oder Äpfeln? Big Grin) und dann brauchst Du nur noch einen entsprechenden Buffer in LabVIEW anzulegen (Initialize Array) und dann mit der MoveBlock() Manager-Funktion die Daten von diesem Pointerbuffer in den von Dir angelegeten LabVIEW Buffer zu kopieren.

Die Dokumentation sollte sich auch noch darüber auslassen ob man den Pointer der diese Funktion zurückgibt auch noch irgendwie deallozieren muss.
(15.05.2014 08:43 )GerdW schrieb:  Hallo Wujaszek,

Zitat:Leider geht bei Prototyp-Konfiguration nicht void* als Ausgabewert.
Mögliche Lösungen?
Die übliche Vorgehensweise ist die Rückgabe eines Fehlercodes. So hat man immer einen I32/U32-Rückgabewert! Ob man den jetzt auch auswertet oder ob dieser überhaupt sinnvolle Werte enthalten muss, steht auf einem anderen Blatt…

Habe gerade nochmal "void*" nachgelesen:
Gib doch einfach ein Array of U8 zurück. Das ist typisiert, kann aber auch alles mögliche enthalten…

Array of U8 ist nicht möglich als Returnwert einer Funktion, da LabVIEW keinerlei Möglichkeit hat festzustellen wie gross der Buffer ist der da zurückgegeben wird. Konfiguration als C-String is wahrscheinlich keine Option da LabVIEW dann nach dem Aufruf der Funktion den Buffer nach einem NULL Byte scant um dann einen entsprechenden LabVIEW String zu allozieren und die Information im Buffer in diesen String zu kopieren. Wenn der Buffer aber Binärdaten enthält wird der meist aber mehrere gültige NULL Bytes enthalten.

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
Question DLL einbinden mit "void * func" kaiman 9 9.820 17.10.2011 14:08
Letzter Beitrag: rolfk

Gehe zu: