LabVIEWForum.de - Eigenes COM Interface in eine VI/LabVIEW implementieren

LabVIEWForum.de

Normale Version: Eigenes COM Interface in eine VI/LabVIEW implementieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
hiho.

ich möchte per LabVIEW eine kamera ansteuern, die einen COM-server zur verfügung stellt (alles lokal am selben PC).. dieser "treiber" (also der COM-server) ist darauf ausgelegt, dass verschiedene anwendungen (clients) auf ihn zugreifen können und bringt selber kein UI mit..

soweit ist noch alles ok, d.h. ich kann mit automation open auf die bereitgestellten interfaces zugreifen und methoden und properties benutzen..
nun kommt das eigentliche problem: der COM-server hat eine art überwachungsfunktion, mit der er nachschaut, ob alle clients noch "leben" und wenn nicht ggf. die kamera (bzw. kameras) wieder freigibt (die werden vorher durch die clients "gelockt").. dafür erwartet er, dass ein client seinerseits ein interface bereitstellt mit den entsprechenden überwachungsmethoden, die der server dann regelmäßig abfragt..

ich hab sehr wenig erfahrung mit activeX und COM, daher wäre ich für ein paar tipps dankbar, ob und wie das mit LabVIEW geht.. ich weiß, dass LabVIEW einen activeX-server hat, aber ich sehe da keine möglichkeit, "benutzerdefinierte" interfaces und methoden hinzuzufügen...

übrigens: bevor man auf die eigentlichen kamera-methoden vom COM-server zugreifen kann, muss man eine methode zum "registrieren" aufrufen (RegisterCallBack) und dort den namen der client-anwendung (string) und einen pointer zum (refnum!?) zum callback-interface übergeben.. letzteres geht natürlich nicht, wenn ich nicht direkt in der VI ein interface (mit methoden) aufmachen kann - oder?
Hast du dir die Beispiele von LabVIEW (Example-Finder) angeschaut? (Excel und IE mit CallBack)
ja, hab ich.. da gehts um events und das ist was anderes, soweit ich es verstanden habe..
der COM-server benutzt auch events, aber für andere sachen (haben die funktion eines "broadcasts", um alle clients zu informieren).. die keep-alive funktion läuft nicht über events, sondern über ein eigenes interface, was die clients bereitstellen sollen.. der COM-server erwartet also, dass die clients gleichzeitig auch server sind für die callback-funktionen..
' schrieb:ja, hab ich.. da gehts um events und das ist was anderes, soweit ich es verstanden habe..
der COM-server benutzt auch events, aber für andere sachen (haben die funktion eines "broadcasts", um alle clients zu informieren).. die keep-alive funktion läuft nicht über events, sondern über ein eigenes interface, was die clients bereitstellen sollen.. der COM-server erwartet also, dass die clients gleichzeitig auch server sind für die callback-funktionen..

Das geht leider nicht. LabVIEW kann nur als eigenständiger Automation Server funktionieren mit dem Automation Interface wie es in seiner Typelib festgelegt ist. Du kannst keine VIs schreiben die ein eigenständiges COM Interface zur Verfügung stellen.

Die einzige Möglichkeit die ich hier sehe ist um hier einen ActiveX/COM Wrapper zu machen (wahrscheinlich nur in Visual C++ einigermassen einfach möglich) der dieses COM Interface auch noch in ein ActiveX Event umsetzt.

Selber würde ich das sogar noch anders tun mit einer Standard C Wrapper DLL die ich mittels Call Library Node aufrufen würde, aber COM in Standard C zu tun ist wohl für die meisten das Letzte was sie je in Erwägung ziehen würden. Aber ich habs nicht so mit C++ und ziehe diese Variante vor. Etwas mehr Handarbeit aber dafür begreife ich auch was der C Compiler gemacht hat Big Grin

Rolf Kalbermatter
Referenz-URLs