Wie eine einfache API, um meine C ++ Anwendung für den Zugriff von LabView hinzufügen?

StackOverflow https://stackoverflow.com/questions/285551

  •  08-07-2019
  •  | 
  •  

Frage

Ich habe ein Datenerfassungsprogramm geschrieben in C ++ (Visual Studio 6.0). Einige Kunden mögen die Software von ihrer eigenen Software oder LabView steuern. Ich möchte mit einem einfachen API, um mit einer dll ich ihnen verteilen können und einige Tipps möchten, wie, um loszulegen. Das wird sehr einfach sein, vielleicht 4 oder 5-Befehle. Mein DAQ-Programm wird nach wie vor in einem eigenen Fenster auf der gleichen Maschine laufen, möchte ich nur um es einzurichten aus einem anderen Programm gesteuert werden.

War es hilfreich?

Lösung

Sie sind auf dem richtigen Weg mit einer DLL. Der eigentliche Trick, es klingt wie, wird entscheiden, welche Art von Interprozesskommunikation (IPC), die Sie verwenden möchten. Die Optionen sind:. Steckdosen, Leitungen, gemeinsam genutzten Speicher, Synchronisationsobjekte (Veranstaltungen, etc.), Dateien, Registry, etc.

Wenn Sie sich entscheiden, dass dann einen Zuhörer in der ausführbaren Datei implementieren für eingehende IPC-Nachrichten zu warten, von welcher Software DLL verwendet wird.

Was die API betrifft, so kann man es einfach halten wie Sie wurden zu wollen. Haben die DLL Ihre 4 oder 5 Funktionen aussetzen (stellen Sie sicher, dass Sie nur verwenden nativen Datentypen, wie char * und lange, bis Modul Grenzprobleme zu vermeiden), und dann werden diejenigen benutzen, um Ihre IPC-Mechanismus mit Ihrer Ausführung App zu kommunizieren.

Andere Tipps

Dinge, die so einfach zu starten haben eine Gewohnheit im Laufe der Zeit wachsen, so dass man vorne besser dran tut ein wenig mehr Arbeit sein kann und mit einer Technik, die mit Ihnen wachsen wird.

Die Implementierung einer COM-Schnittstelle zu Ihrem Programm würden die Kunden sind viel Freiheit, wie die Schnittstelle mit ihm geben, und Sie würden nicht über die Mechanik von IPC zu kümmern, etc, da COM gestaltet ist, dass alle von Ihnen zu verstecken .

In der Zukunft COM bereits gut definieren Idiome für Dinge wie Ereignisse, die auch Unterstützung von Skriptsprachen sind, etc. sollten Sie sie benötigen.

Aktualisieren : Es gibt eine Menge Möglichkeiten, von COM zu implementieren. Sie können es von den ersten Prinzipien mit der Führung eines guten COM Buchs bauen, oder wie ATL Verwendung von Rahmen einen Teil der Kesselplatte zu speichern. Es gibt viele gute Proben, zum Beispiel finden Sie unter MSDN .

Der große Vorteil von COM ist, dass Sie nicht brauchen eine DLL! Ihre Anwendung würde immer laufen, sagen Sie. Das bedeutet, dass es als die COM-Objekt Schöpfer handeln kann ( „local-Server“).

Wenn jemand einen „stdcall“ DLL stattdessen wollen würde, könnte man ihnen eine DLL geben, die intern nur leitet alle Anrufe an die COM-Schnittstelle. Das Schreiben, es wäre ziemlich trivial sein. Sie haben nur 5 Funktionen, sagen Sie. Das legt nahe, Sie eine COM-Schnittstelle haben, mit diesen fünf Methoden. Wenn die Wrapper-DLL geladen wird, fragt es Ihre EXE sein COM-Objekt zu erstellen. Die DLL wiederum aussetzt 5 stdcall Methoden, von denen jede eine Methode auf dem COM-Objekt aufruft.

Sie könnte eine DLL verwenden. Ich würde es in Betracht ziehen. Aber ich würde auch erwägen, eine einfache http-basierte API bis peitschend, vorzugsweise RESTful.

Vorteile: Einfach zu tragen. Kann eine Client-Anwendung aus einer beliebigen Sprache trivialer schreiben. Kann in einem Netzwerk arbeiten. Testing wird einfacher (Verwendung einer Skriptsprache oder Ihrem Browser).

Nachteile: Leistung wird langsamer. Deutlich mehr Sanitär es in C ++ einzurichten. Ich bin mir nicht sicher, ob LabView kann http telefonieren.

So etwas wie:

  

http: // xxx / data [GET, POST vielleicht zum Testen]

     

http: // xxx / data / start [POST]

     

http: // xxx / data / Stopp [POST]

     

http: // xxx / data / Parameter [POST]

Da Ihre Anforderungen es können sein etwas übertrieben, aber dann vielleicht auch nicht. Viele Apps, die ich gearbeitet habe hatte portiert werden und wäre schneller gewesen zu verlängern, wenn wir eine schnellere dev Sprache verwendet haben könnten, um es zu testen und zu erweitern.

LabVIEW unterstützt DLL Anrufe machen, aber dies ist einer der schwächeren Flecken in LabVIEW Entwicklung. falsch gemacht, kann dies zu einer Anwendung führen, die zu Abstürzen anfälliger ist. Als LabVIEW-Entwickler, wie ich MattyT Vorschlag einen HTTP-Dienst zu schaffen. Jede Sprache auf jeder Plattform, die ein TCP / IP-Port zugreifen kann dann machen kann. Ich denke, dass Sie Ihr eigene TCP / IP-Protokoll statt Voll Bohrung HTTP verwenden könnten, aber so oder so die Kompatibilität Problem gelöst ist.

Wenn Sie DLLs tun verwenden, sind hier einige Tipps. Verwenden Sie keine structs oder Zeiger in Ihrer Funktionsaufruf Argumentliste Structs. Nicht-Speicher in der DLL zuweisen zurück an LabVIEW werden. LabVIEW hat in memmory Management aufgebaut und mit anderen nicht gut spielen. Dies kann auf andere Sprachen anwenden, die Speicherverwaltung wie Java haben. LabVIEW wird besser funktionieren, wenn es den Speicher reserviert und übergibt einen Zeiger auf die DLL. Vermeiden Sie Zeiger, Arrays und Strings, wo möglich. LabVIEW kann diesen DLLs passieren, aber es ist ein fortgeschrittenes Thema und funktioniert am besten, wenn der LabVIEW-Entwickler auch weiß, C, was nicht immer der Fall sein wird.

Es gibt eine bezogene Frage hier . Ich möchte nicht mit etwas, um am Ende der LabView-spezifisch ist, und es scheint, dass LabView können DLLs zugreifen, wenn sie stdcall verwenden. Eine DLL wie dies würde von einem VB oder anderer Windows-Software als auch aufrufbar sein, das ist das, was ich drehe.

Ich bin mir nicht sicher, es ist Fähigkeit, eine COM-Schnittstelle für den Zugriff aber etwas ausführlicher auf würde schätzen, was das wie für meine Anwendung aussehen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top