LabVIEWForum.de
Unterschied Managed/Unmanaged C++ DLL? - 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: Unterschied Managed/Unmanaged C++ DLL? (/Thread-Unterschied-Managed-Unmanaged-C-DLL)

Seiten: 1 2


Unterschied Managed/Unmanaged C++ DLL? - M4Z - 01.12.2009 19:55

Hallo miteinander!
Ich bin Systemtechnikstudent im dritten Semester und arbeite gerade an einem Testautomaten, der mit LabVIEW 8.5 gesteuert etc werden soll.
Dazu benötigen wir von unserem Auftraggeber eine DLL, um spezifische Funktionen im Testobjekt aufzurufen. Diese DLL wird erst noch geschrieben.

Nun zu meiner Frage: Unser Auftraggeber fragte, ob wir eine managed oder eine unmanaged DLL brauchen. Nach kurzer Rücksprache mit einem Dozenten, der sich mit LabVIEW auskennt, riet dieser uns, eine unmanaged DLL zu verlangen. Nun ist fraglicher Dozent längerfristig nicht erreichbar und unser Auftraggeber möchte wissen, wieso wir eine unmanaged DLL wollen. Eine solche zu schreiben bedeute für sie einen Mehraufwand. Ich weiss, dass eine managed DLL auf das .NET Framework aufbaut und eine unmanaged nicht.

Welche Vor- und Nachteile bringt es in LabVIEW mit sich, eine managed bzw. unmanaged DLL einzubinden bzw. ist überhaupt beides möglich?

Vielen Dank für eure Hilfe!

greetz

M4Z

PS: Sorry falls fas eine totale Noobfrage ist, aber ich hab mit LabVIEW leider noch nicht sehr viel Erfahrung.
thx


Unterschied Managed/Unmanaged C++ DLL? - rolfk - 02.12.2009 09:57

Bei managed Mode geht es um .Net Assemblies. Auf die greift man mit den LabVIEW .Net Nodes zu. Bei Unmanaged Mode geht es um Standard DLLs welche Funktionen exportieren. Diese werden typischerwiese nicht in C# sondern in C oder C++ programmiert und in LabVIEW mittels Call Library Node angesprochen.

Grundsätzlich ist das Erstellen von .Net Assemblies in C# wohl als einfacher zu bezeichnen, und für C unbedarfte Seelen mittels .Net Funktionen in LabVIEW auch einfacher einzubinden da man sich nicht so ausführlich mit der richtigen Konfiguration von Parametern und deren Datentypen abgeben muss.

Persönlich finde ich die Wahl von .Net, sicher für Treiber, aber in den meisten Fällen etwa das gleiche wie wenn man den Hummer aus der Garage holt um eben mal ein Brot beim Bäcker um die Ecke zu holen, einfach weil er dort steht. Laufen kostet kaum mehr Zeit und wäre viel gesünder. Big Grin

Aber ja, ich verstehe C ziemlich gut und in obiger Analogie, habe auch Beine die noch funktionieren!

Rolf Kalbermatter


Unterschied Managed/Unmanaged C++ DLL? - M4Z - 02.12.2009 12:31

Vielen Dank für den Schnellkurs! Ich werde mich mal informieren, wie das funktioniert und melde mich hier wieder, wenns nicht laufen sollteWink

Danke nochmal.

PS: Die DLL wird anscheinend in C++ programmiert


Unterschied Managed/Unmanaged C++ DLL? - M4Z - 21.01.2010 09:29

Hallo, ich habe jetzt versucht die DLL einzubinden, allerdings funktioniert das nicht so wie ich will. Die DLL ist afaik in C# geschrieben und .NET managed.

ich habe die DLL und mein VI jetzt ma gezippt und auf meinen Webspace geladen

als Answer-String kann eine der folgenden Möglichkeiten herauskommen: "write", "read", "uid" oder "nada".
Die nicht angeschlossenen Eingänge werden eigentlich nicht benötigt, was mache ich damit?
Habe ich ganz allgemein etwas falsch gemacht?

Vielen Dank für die Hilfe

edit:
Datei ist im Anhang, Danke für den Hinweis.


Unterschied Managed/Unmanaged C++ DLL? - Y-P - 21.01.2010 09:35

Bitte hier im Forum hochladen und nicht extern. LVF-Regeln beachten.:rulez:Danke.

Gruß Markus

' schrieb:ich habe die DLL und mein VI jetzt ma gezippt und auf meinen Webspace geladen: Download



Unterschied Managed/Unmanaged C++ DLL? - rolfk - 21.01.2010 20:23

' schrieb:Hallo, ich habe jetzt versucht die DLL einzubinden, allerdings funktioniert das nicht so wie ich will. Die DLL ist afaik in C# geschrieben und .NET managed.

ich habe die DLL und mein VI jetzt ma gezippt und auf meinen Webspace geladen

als Answer-String kann eine der folgenden Möglichkeiten herauskommen: "write", "read", "uid" oder "nada".
Die nicht angeschlossenen Eingänge werden eigentlich nicht benötigt, was mache ich damit?
Habe ich ganz allgemein etwas falsch gemacht?

Vielen Dank für die Hilfe

edit:
Datei ist im Anhang, Danke für den Hinweis.

Also die .Net Funktion ist scheinbar so deklariert dass das Ein- und Ausgänge sind. Wenn das nur Ausgänge sind, sollte das auch so im .Net Project deklariert werden, ansonsten verlangt LabVIEW halt einen gültigen Eingangswert: zum Beispiel eine leere String- resp. eine False Booleankonstante.

Testen kann ich es nicht denn die Funktion hängt auf meinem Computer undendlich. Weiss aber nicht ob das ist weil ich die entsprechende Hardware/Software nicht habe oder weil einer der Parameter nicht gültig ist.


Unterschied Managed/Unmanaged C++ DLL? - M4Z - 22.01.2010 08:57

' schrieb:Also die .Net Funktion ist scheinbar so deklariert dass das Ein- und Ausgänge sind. Wenn das nur Ausgänge sind, sollte das auch so im .Net Project deklariert werden, ansonsten verlangt LabVIEW halt einen gültigen Eingangswert: zum Beispiel eine leere String- resp. eine False Booleankonstante.

Testen kann ich es nicht denn die Funktion hängt auf meinem Computer undendlich. Weiss aber nicht ob das ist weil ich die entsprechende Hardware/Software nicht habe oder weil einer der Parameter nicht gültig ist.

Ok... Eigentlich sollte die Capabilty Methode der DLL keine weitere Hard- oder Software benötigen... dann werd ich da nochmal den Programmierer kontaktieren müssen. danke schon mal


Unterschied Managed/Unmanaged C++ DLL? - RoLe - 22.01.2010 11:27

' schrieb:Die nicht angeschlossenen Eingänge werden eigentlich nicht benötigt, was mache ich damit?
Habe ich ganz allgemein etwas falsch gemacht?
Als bei mir ist es ausführbar und beendet sich, wenn ich die Eingänge verbinde und die Schleife entferne.
Die beiden Ausgänge bleiben aber leer, weil ...
Code:
public bool Capability(string reader, string antenna, string badge, bool metal, ref string answer, ref bool isPrompt);
Die 2 nicht verbundenen sind als ref deklariert.
Wie das geht mit .NET habe ich noch nicht rausgefunden.

Habe mir mal den Code angeschaut.
Meine Idee, was der "Schlüsselhersteller" (Programmierer) ändern könnte.
Die 2 ref's aus der Funktion entfernen und vorher als public deklarieren.
Die kannst du dann in LabVIEW nach dem aufruf von Capability als Property abfragen.

[code]public class SerComLayer
{


Unterschied Managed/Unmanaged C++ DLL? - M4Z - 22.01.2010 11:47

na dass ist doch schon mal was... die Sache mit der "ref-Definition" ist dann wohl auch dafür verantwortlich, dass bei answer nichts herauskommt?
Danke!


Unterschied Managed/Unmanaged C++ DLL? - rolfk - 22.01.2010 13:00

' schrieb:na dass ist doch schon mal was... die Sache mit der "ref-Definition" ist dann wohl auch dafür verantwortlich, dass bei answer nichts herauskommt?
Danke!

Das sehe ich anders. Kenne mich bei der .Net resp. C# Nomenklature nicht aus aber ich nehme mal an das ref hier einfach bedeudet "pass by reference" also als Pointer und das wird eben für Parameter benützt die einen Wert zurückgeben können. Weiss aber jetzt nicht was .Net benötigt dass es nur ein "output only" ref Parameter ist.