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 

Hilfe zu Typedef bei dll



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!

18.02.2008, 01:07
Beitrag #1

Ruediger Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Mar 2005

2012
1995
DE_EN


Deutschland
Hilfe zu Typedef bei dll
Hallo,
ich möchte in LabVIEW eine dll einbinden.
Fuer einfache Sachen habe ich das auch schon hinbekommen (so etwas wie Integer oder Strings übergeben / lesen)
Nun habe ich eine dll bei der ich einen Aufruf machen will, und zwar:

alsnCall(char *fullDeviceNameAndProperty,DTYPE *dout,DTYPE *din,short access,double *dTimeStamp)
als functionsaufruf von XYZ.dll
DTYPE ist ein Struct, und sieht so aus:

typedef struct
{
UINT32 dArrayLength;
short dFormat;
short xferReason;
int dStamp;
int sysStamp;
double dTimeStamp;
char dTag[TAG_NAME_SIZE]; // 16-chars
DUNION data;
} DTYPE;

wobei ein DUNION so aussieht:

typedef union
{
void *vptr;
char *cptr;
UINT8 *bptr;
SINT16 *sptr;
UINT16 *usptr;
SINT32 *lptr;
UINT32 *ulptr;
float *fptr;
double *dptr;
} DUNION;

Wie würde hierfür der LabVIEW- Code aussehen?
Kann ich mir in LabVIEW typedef´s basteln und sie dann irgendwie TypCast`en??
Ich dachte mir eine typedef ist ja eigentlich nichts anderes als ein Cluster, oder??
Könnte ich mir dann nicht so etwas als stricttzpe von LabVIEW bauen und dann an die dll übergeben?
Ich hoffe einer von Euch Cracks kann mir ein wenig Erleuchtung geben.
Gibt es irgendwo etwas wie eine Anleitung oder kann mir jemand o.g. Code in LabVIEW übersetzen (LV 8).
Mit freundlichen Grüßen
Ruediger
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.02.2008, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2008 10:11 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Hilfe zu Typedef bei dll
' schrieb:Hallo,
ich möchte in LabVIEW eine dll einbinden.
Fuer einfache Sachen habe ich das auch schon hinbekommen (so etwas wie Integer oder Strings übergeben / lesen)
Nun habe ich eine dll bei der ich einen Aufruf machen will, und zwar:

alsnCall(char *fullDeviceNameAndProperty,DTYPE *dout,DTYPE *din,short access,double *dTimeStamp)
als functionsaufruf von XYZ.dll
DTYPE ist ein Struct, und sieht so aus:

typedef struct
{
UINT32 dArrayLength;
short dFormat;
short xferReason;
int dStamp;
int sysStamp;
double dTimeStamp;
char dTag[TAG_NAME_SIZE]; // 16-chars
DUNION data;
} DTYPE;

wobei ein DUNION so aussieht:

typedef union
{
void *vptr;
char *cptr;
UINT8 *bptr;
SINT16 *sptr;
UINT16 *usptr;
SINT32 *lptr;
UINT32 *ulptr;
float *fptr;
double *dptr;
} DUNION;

Wie würde hierfür der LabVIEW- Code aussehen?
Kann ich mir in LabVIEW typedef´s basteln und sie dann irgendwie TypCast`en??
Ich dachte mir eine typedef ist ja eigentlich nichts anderes als ein Cluster, oder??
Könnte ich mir dann nicht so etwas als stricttzpe von LabVIEW bauen und dann an die dll übergeben?
Ich hoffe einer von Euch Cracks kann mir ein wenig Erleuchtung geben.
Gibt es irgendwo etwas wie eine Anleitung oder kann mir jemand o.g. Code in LabVIEW übersetzen (LV 8).
Mit freundlichen Grüßen
Ruediger

Ja geht im Prinzip, ausser dass Deine DUNION einen Pointer enthält und das kann LabVIEW nicht so einfach innrhalb einer Strukture/Cluster. Ohne wirklich gediegene C Kenntnisse ist da nichts zu tun und deshalb schlage ich vor gleich mit C anzufangen und eine Wrapper DLL für diese Funktion zu schreiben.

Rolf Kalbermatter

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
19.02.2008, 09:01
Beitrag #3

Ruediger Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Mar 2005

2012
1995
DE_EN


Deutschland
Hilfe zu Typedef bei dll
' schrieb:Ja geht im Prinzip, ausser dass Deine DUNION einen Pointer enthält und das kann LabVIEW nicht so einfach innrhalb einer Strukture/Cluster. Ohne wirklich gediegene C Kenntnisse ist da nichts zu tun und deshalb schlage ich vor gleich mit C anzufangen und eine Wrapper DLL für diese Funktion zu schreiben.

Rolf Kalbermatter

Danke Rolf,
so etwas habe ich mir schon gedacht.
Kann ich denn DTYPE direkt als Cluster an die DLL übergeben???
Ruediger
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.02.2008, 10:27 (Dieser Beitrag wurde zuletzt bearbeitet: 19.02.2008 10:28 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Hilfe zu Typedef bei dll
' schrieb:Danke Rolf,
so etwas habe ich mir schon gedacht.
Kann ich denn DTYPE direkt als Cluster an die DLL übergeben???
Ruediger

Nein! Weil er die DUNION enthält die NICHT direkt als LabVIEW Cluster implementierbar ist. Um das zu tun müsstest Du sehr viel, und ich meine sehr viel, low level tricks mit LabVIEW Funktionen und Aufrufen von anderen C Funktionen mittels Call Library tun. Wäre zwar möglich aber nur mit einem wirklichen sehr guten Verständnis was ein C Compiler macht wenn er Stukturen und Pointers im Speicher verwendet. Da ist es schlicht einfacher und auch mit weniger C Detailkenntnissen zu tun, um mit einem C Compiler eine Wrapper DLL zu machen die zwischen mehr LabVIEW freundlichen Datentypen und Deiner DLL übersetzt.
Und wenn Du jetzt sagst dass Du das nicht kannst weil Du C nicht gut genug kennst musst Du mir einfach glauben, dass Deine Chance um dies ohne extra Wrapper DLL zum Laufen zu bringen praktisch 0% sind.

Rolf Kalbermatter

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
19.02.2008, 11:23
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Hilfe zu Typedef bei dll
' schrieb:Kann ich denn DTYPE direkt als Cluster an die DLL übergeben???
Ich im Gegensatz zu Rolf fang mal mit: Ja! an. Wink
Aber: Und hier kommen jetzt alle die Einwände, die Rolf schon aufgeführt hat.

Das Problem ist der eine Pointer in DUNION. LV ist nicht dafür gedacht, mit direkten Pointern zu arbeiten. Zumindest hat dieses Feature noch keiner eingebaut. Die Pointer im Funktionsaufruf sind quasi nur indirekt. Die kann ein DLL-Knoten mittels "Zeiger in Wert" auflösen. Das Problem in der Praxis liegt also daran, dass ein Pointer in einem über Pointer erreichbarem Speicherbereich liegt. Wäre DUNION ein Parameter im Aufruf, läge die Sache schon wieder anders.

Im übrigen kannst du schon einen Cluster machen und den an die DLL übergeben. Das an sich ginge schon. Es nützt nur nix wegen des Problems mit dem Union.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: