' schrieb:Hallo!
Bin neu in diesem Bereich, habe deshalb die Frage, ob es allgemein möglich ist, eine Microsoft Foundation Class(MFC) Bibliothek unter LabVIEW 8.5 zu importieren?
Wenn ja, was benötige ich dafür?
Beispiele/Helps.
Vielen Dank im Voraus
Swift
Die kurze Antwort ist nein. Die lange ist nicht ohne EXTREM viel Arbeit. MFC ist C++ based. LabVIEW hat kein direktes C++ Interface. Das wäre auch nicht möglich da es keinen allgemein erkannten Binärstandard gibt für C++ Interfaces. (D)COM ist eine Möglichkeit aber zu low level für eine Umgebung wie LabVIEW. ActiveX das auf (D)COM aufbaut ist eine andere Möglichkeit aber halt nur Windows genau wie DCOM. LabVIEW unterstützt ActiveX aber dafür muss Dein C Code auch entsprechend strukturiert sein. Die MFC ist das ganz sicher nicht einfach so. Allerdings kannst Du einen ActiveX Server programmieren der MFC verwendet.
Das andere mögliche Interface in LabVIEW ist die Call Library Node. Diese interfaced mit exportiereten Funktionen in einer DLL. Ein C++ Interface wird aber normalerweise nur über einen Constructor exportiert und die Methoden und Variablen des Objektes werden impliziet von dem resultierenden Objektpointer aus referenziert. Das unterstützt die Call Library Node nicht auch gerade weil jeder C Compiler eine etwas andere Idee hat wie die Methoden und Variablen innerhalb des Objektes angeordnet sind und das Objekt selber zudem keinerlei Informationen dazu gibt. Diese müssen vom C++ Compiler aus der Interface Deklaration herausgefunden werden. Um die Call Library Node mit C++ Libraries verwenden zu können müsstest Du eine Wrapper Schicht in C++ schreiben, die für jedes Objekt eine explizite Constructor und Destructor Funktion und auch für jede Methode die Du verwenden willst eine Wrapperfunktion und für jede (public) Variable die Du lesen oder schreiben willst eine entsprechende Accessorfunktion exportiert.
Wahrscheinlich ist von den beiden Varianten die mit dem Erzeugen eines ActiveX Controls oder Servers die etwas einfachere aber trivial und schnell gemacht sind sie allebeide nicht.
Rolf Kalbermatter