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 

array of cluster?



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!

31.08.2011, 09:58
Beitrag #1

THL Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 111
Registriert seit: May 2011

2012
2009
EN


Deutschland
array of cluster?
Hallo,

ich habe eine leider sehr schlecht dokumentierte DLL vorliegen, bei der ich bei einem Funktionsaufruf nicht weiterkomme und hoffe, dass mir hier jemand auf die Sprünge helfen kann (bin leider nicht so firm in C). Aus der DLL-Dokumentation:
Code:
PositionerCheck
Determines number of connected positioners and their respective hardware ids.
Parameter
   Return value [out] Number of available positioners.
   PositionerInfo [out] Array of structure PositionerInfo. It contains the hardware id for unlocked devices.
                        Connected devices are marked as locked.
Ist natürlich sehr vielsagend... darum mal weiter in der Dokumentation gewühlt und das folgende in der .h-Datei gefunden:
Code:
struct PositionerInfo{
  int id;
  bool locked;
};

NCB_API Int32 PositionerCheck( PositionerInfo** posInfo );
Sieht für mich (in LabView-Terminologie) nach einem Array of Cluster aus - aber wie übergibt man so etwas an eine DLL?

Bei dem Gerät war auch ein *hust* LabView-Treiber dabei, der nichts weiter als eine Library der DLL-Aufrufe beinhaltete. Leider sieht dieser Treiber sehr nach "mit der heissen Nadel gestrickt" aus: Ich habe da schon (bei anderen Aufrufen) einige gravierende Fehler entdeckt, so dass ich denke, dass die Implementierung dieses Funktionsaufrufes ebenfalls falsch ist (siehe Bild unten). Dort wird ja nur 1 Cluster übergeben, was ja anscheinend der oben aufgeführten Dokumentation widerspricht.

Jemand eine Idee, was nun richtig ist?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
31.08.2011, 13:57
Beitrag #2

BeFu Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 84
Registriert seit: Jun 2006

2011
2006
DE_EN

96450
Deutschland
RE: array of cluster?
(31.08.2011 09:58 )THL schrieb:  Hallo,
...
Parameter
Return value [out] Number of available positioners.
PositionerInfo [out] Array of structure PositionerInfo. It contains the hardware id for unlocked devices.
Connected devices are marked as locked.
[/code]
Ist natürlich sehr vielsagend... darum mal weiter in der Dokumentation gewühlt und das folgende in der .h-Datei gefunden:
Code:
struct PositionerInfo{
  int id;
  bool locked;
};

NCB_API Int32 PositionerCheck( PositionerInfo** posInfo );
Sieht für mich (in LabView-Terminologie) nach einem Array of Cluster aus - aber wie übergibt man so etwas an eine DLL?
...

Hallo THL,

gemäß dem Tutorial http://www.labviewforum.de/DLL-einbindung-t5504.html musst Du in LabVIEW den Speicher allokieren, der von der aufgerufenen DLL-Funktion benötigt wird. Also in Deinem Fall ein 1D-Arry mit ausreichend out für value[out] vom Typ int.

Nach meiner Meinung kannst Du die Aufgabe wie folgt lösen.

1. Laut dem oben genannten Tutorium musst Du z.B. in C eine Wrapper-Funktion schreiben, welche die Datentypen des zurückgelieferten Funktionsparamenters struct PositionerInfo in int id[out] und bool (unsigned int) locked[out] zerlegt.

2. Von LabVIEW aus kannst Du dann mittels "Knoten zum Aufruf externer Bibliotheken" mit in LabVIEW initialisierten 1D-Feldern int id[out] und unsigned int locked[out] auf die von der Wrapper-Funktion gelieferten Felder zugreifen.

Ich hoffe, mein Ansatz und das beigefügte VI (LV 8.5 <-- wird nun automatisch erkanntRolleyes) zur Allokation des benötigten Speicherplatzes in LV sind nicht ganz verkehrt.

Schöne Grüße,

BeFu


Angehängte Datei(en)
8.5 .vi  THL-DLL.vi (Größe: 9,78 KB / Downloads: 239)

Das Ziel ist der Weg
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.09.2011, 08:44
Beitrag #3

THL Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 111
Registriert seit: May 2011

2012
2009
EN


Deutschland
RE: array of cluster?
Danke für die Antwort. Sowas wie einen Wrapper hatte ich befürchtet und gehofft, dass es irgendwie direkt mit LabView-Bordmitteln geht, da ich hier keinen C-Compiler zur Verfügung habe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.09.2011, 12:11
Beitrag #4

BeFu Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 84
Registriert seit: Jun 2006

2011
2006
DE_EN

96450
Deutschland
RE: array of cluster?
(01.09.2011 08:44 )THL schrieb:  Danke für die Antwort. Sowas wie einen Wrapper hatte ich befürchtet und gehofft, dass es irgendwie direkt mit LabView-Bordmitteln geht, da ich hier keinen C-Compiler zur Verfügung habe.

Hallo THL,

von Kollegen wurde mir der kostenlose (auf GNU-Compiler aufsetzende) MS Windows taugliche Compiler von http://www.mingw.org empfohlen.

Viel Erfolg damit,

BeFu

Das Ziel ist der Weg
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
  Cluster der Array enthält als Ausgabe-Parameter einer dll SchwindelInside 4 7.164 07.12.2012 12:51
Letzter Beitrag: SchwindelInside
  Cluster und 2 Dim Array in DLL pgl_bear 4 5.502 16.03.2009 10:17
Letzter Beitrag: pgl_bear
  DLL und Array of Cluster hepman 3 7.676 27.04.2006 19:44
Letzter Beitrag: Martin.Henz

Gehe zu: