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 

vi aus DLL erstellen



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!

14.01.2013, 12:20 (Dieser Beitrag wurde zuletzt bearbeitet: 14.01.2013 12:27 von rolfk.)
Beitrag #11

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: vi aus DLL erstellen
(14.01.2013 08:25 )leon_lab schrieb:  Also der Funktionsheader ist folgendermaßen:

long funktion(void *handle, unsigned int *data);

Das handle wurde in den anderen Beispielen als "Numerisches Element" - vorzeichenloser 32-Bit Interger und wird als Wert übergeben, das habe ich hier auch so gemacht.

Bei dem usigned int *data bin ich mir jetzt einfach nicht sicher wie man das richtig macht.

Ich hab folgendes eingestellt:
Typ: Array
Datentyp: vorzeichenloser 16-Bit Integer
Dim: 1
Arry-Format: Array-Datenzeiger.

Dann hab ich in das Frontpanel ein Array gezogen und hier einen U16 Integer Wert rein und das dann mit dem Connector der DLL verbunden. Ist das so richtig?

VIELEN LIEBEN DANK FÜR EURE HILFE Smile

Für das Handle solltest Du bei allen Funktionen kein "unsigned int32" benützen sondern ein "unsigned pointer sized integer" denn es handelt sich hier ja um einen Pointer. Auch sollte das entsprechende Frontpanel Control überall auf einen uInt64 geändert werden, so dass das Kontroll einen allenfalls 64 Bit Pointerwert übertragen kann.
Dieser Pointer ist zwar in 32 Bit LabVIEW ein 32 Bit Integer aber in 64 Bit LabVIEW eben ein 64 Bit Integer (wobei die DLL dann natürlich auch eine 64 Bit DLL sein muss).
Zwar ist Deine DLL im Moment wahrscheinlich nur als 32 Bit DLL verfügbar und musst Du deshalb auch 32 Bit LabVIEW benützen, aber in einem Jahr könnte das plötzlich anders sein, und dann ist es praktisch wenn man die VIs schon richtig konfiguriert hat und nicht noch einmal durch die ganze Library gehen muss.

Was das Array angeht hier definierst Du in LabVIEW einfach ein "Array von unsigned int32", konfigurierst die Call Library Node als Array, Numerisch 32 Bit Integer, Pass as Array Pointer. Nun musst Du noch sicherstellen dass das Array gross genug ist. Wenn Du der Funktion hier ein Array vorgeben musst aus dem sie lesen soll, initialisierst Du das Array einfach mit den (16) Werten die Du dieser Funktion übergeben willst. Wenn die Funktion aber in dieses Array Werte schrieben will, MUSST Du sicherstellen dass das Array in LabVIEW entsprechend alloziert wird. Eine "Initialize Array" Node macht das. Wenn Du das Array nicht oder zu klein allozierst bekommst Du ziemlich sicher einen errror 1097 und ganz 100% sicher korrumpiert die DLL irgendwelche Speicherbereiche.

(13.01.2013 00:41 )Trinitatis schrieb:  Ob man einer DLL einen Cluster übergeben kann, weiß ich gar nicht - würde mich auch mal interessieren, ich denke mal: eher nicht.

Das geht sehr wohl. Wäre im Prinzip in diesem Fall sogar möglich, aber ist normalerweise nur sinnvoll für struct Parameter die als Pointer übergeben werden. Um das machen zu können darf die Struktur nur Skalars enthalten (also keine Strings, Arrays oder Funktionspointer) und muss der CLN Parameter als "Adapt to Type" konfiguriert werden.

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
14.01.2013, 15:23
Beitrag #12

leon_lab Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Jan 2013

9.0
2013
DE



RE: vi aus DLL erstellen
mich hat das mit den handles auch sehr gewundert, aber das ganze wird im code ohne referenz übergeben und auch auch bei allen beispielen in labview. das scheint irgendwie so gewollt zu sein. ich hab meinen vorgesetzten gefragt ich soll es so lassen wie es bisher war.

vielen dank für deine sehr ausführliche antwort.


eine kleine hilfestellung wäre noch nett.
und zwar ist es so, dass ich im blockdiagramm:

Rechte Maustaste -> Eigene Bibliotheken

hier wird die Bibliothek angezeigt, aber meine neue Funktion wird da nciht angzeigt. Wie bekomm ich denn das neue vi da mit rein? Es ist im gleichen Ordner gespeichert wie die anderen.

Vielen Dank Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.01.2013, 16:10
Beitrag #13

leon_lab Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Jan 2013

9.0
2013
DE



RE: vi aus DLL erstellen
also keine ahnung,

ich hab das neue vi dort abgespeichert wo die alten sind in diesem user.lib ordner, aber es wird einfach da nicht angezeigt....

http://zone.ni.com/reference/de-XX/help/..._controls/


warum geht das bei mir nicht? was mach ich falsch?


Vielen Dank 2hands
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.01.2013, 18:32 (Dieser Beitrag wurde zuletzt bearbeitet: 14.01.2013 18:35 von rolfk.)
Beitrag #14

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: vi aus DLL erstellen
(14.01.2013 16:10 )leon_lab schrieb:  also keine ahnung,

ich hab das neue vi dort abgespeichert wo die alten sind in diesem user.lib ordner, aber es wird einfach da nicht angezeigt....

http://zone.ni.com/reference/de-XX/help/..._controls/


warum geht das bei mir nicht? was mach ich falsch?


Vielen Dank 2hands

Abspeichern alleine nützt nichts, man muss es auch in der lvlib hinzufügen. Öffne die lvlib mal, sollte dann ähnlich aussehen wie ein Project und dann mit rechter Maustaste Add->File irgendwo im Public Folder hinzufügen.

Was das Handle angeht, da braucht man gerade keine Referenze, da Du das Handle selber als Wert übergeben willst, nicht den Inhalt des Handles, so es denn wirklich ein Pointer ist. Denn void* kann in C alles mögliche sein, im Prinzip ein Pointer auf irgendwas aber auch nur ein Index in eine private Tabelle. Was wo und wie kannst Du als Benützer nicht bestimmen, nur dass der Wert des Handles irgendwie in einen Pointer passen muss. Und gerade deshalb sollte man die CLNs alle anpassen und den jeden "void *handle" Parameter als Pointer sized Integer konfigurieren statt ihn als int32 Integer zu konfigurieren. Denn das erste ist sowohl in 64 Bit als auch 32 Bit LabVIEW korrekt aber das zweite nur in 32 Bit LabVIEW.

Irgendeine der Funktionen wird das Handle öffnen und wenn es nicht als Funktionswert zurückgegeben wird ist der entsprechende Funktionsparameter als void **handle deklariert. Hier muss man den Pointer sized Integer schon als Referenz übergeben.

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
15.01.2013, 08:17
Beitrag #15

leon_lab Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Jan 2013

9.0
2013
DE



RE: vi aus DLL erstellen
Vielen Dank für deine Antwort.


Zitat:Was das Handle angeht, da braucht man gerade keine Referenze, da Du das Handle selber als Wert übergeben willst, nicht den Inhalt des Handles, so es denn wirklich ein Pointer ist. Denn void* kann in C alles mögliche sein, im Prinzip ein Pointer auf irgendwas aber auch nur ein Index in eine private Tabelle. Was wo und wie kannst Du als Benützer nicht bestimmen, nur dass der Wert des Handles irgendwie in einen Pointer passen muss. Und gerade deshalb sollte man die CLNs alle anpassen und den jeden "void *handle" Parameter als Pointer sized Integer konfigurieren statt ihn als int32 Integer zu konfigurieren. Denn das erste ist sowohl in 64 Bit als auch 32 Bit LabVIEW korrekt aber das zweite nur in 32 Bit LabVIEW.

Werde ich mal vorlschalgen das so zu machen. Smile Vielen Dank für deinen Hinweis.




Zitat:Abspeichern alleine nützt nichts, man muss es auch in der lvlib hinzufügen. Öffne die lvlib mal, sollte dann ähnlich aussehen wie ein Project und dann mit rechter Maustaste Add->File irgendwo im Public Folder hinzufügen.

Das hab ich schon gemacht nur leider geht es nicht. Wenn ich das VI alleine in den user.lib Ordner stecke, wird es einwandfrei angzeigt, sobald ich es aber in einen Unterordner stecke, wird das VI nicht angezeigt. Die anderen VI´s aber irgendwie schon.

Ich verstehe die Welt nicht mehr gibt es da evtl. noch irgendwo eine Sondereinstellung? Muss man da noch irgendwie bei einem VI und der lvlib etwas einstellen? Weil das VI ist 100% im Ordner wo die anderen VI´s sind und es ist auch der lvlib auf die, die anderen zugreifen. Bahn
Ich glaub mir hilft solangsam nur noch Beer , hehe Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2013, 09:26
Beitrag #16

leon_lab Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Jan 2013

9.0
2013
DE



RE: vi aus DLL erstellen
Ich bin das jetzt umgangen indem ich einfach eine neue Bibliothek angelegt habe und dort alle VI´s hinzugefügt habe.

Die alte musste ich erst löschen sonst hat er das mit der Bibilothek-Zugehörtigkeit nicht kapiert. Vielleicht kann da noch jemand was dazu schreiben, warum er das neue VI nicht in der alten Bibliothek akzeptiert hat.


Jetzt hab ich aber das Problem, dass die VI´s eigene Icons haben. Die neue lvlib und der Unterordner haben dieses Icon jetzt nicht. Wie kann ich das Icon denn setzen?

Vielen Dank.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.01.2013, 12:05
Beitrag #17

dali4u Offline
LVF-Stammgast
***


Beiträge: 298
Registriert seit: Aug 2008

12SP1, 14SP1
2007
DE


Deutschland
RE: vi aus DLL erstellen
(15.01.2013 09:26 )leon_lab schrieb:  Jetzt hab ich aber das Problem, dass die VI´s eigene Icons haben. Die neue lvlib und der Unterordner haben dieses Icon jetzt nicht. Wie kann ich das Icon denn setzen?

Glas1
Oje, ich vermute mal dass Du in dem user.lib eine Bibliothek hattest. Dort werden die VI Symbole über eine
MNU Daten geregelt und im Blockdiagramm (rechte Maustaste) angezeigt. Ich vermute dass das der Grund
ist, warum Deine VI nicht angezeigt worden ist. Dort sollte man auch nichts drin ändern, bis man weiss was
man tut.

Daher nochmal anders gefragt: WO genau wird Dein VI nicht angezeigt? (Blockdiagramm, rechte Maustaste?
oder z.B: im Projekt-Explorer in der erstellten vilib?
Glas1
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: