' schrieb:Hallo,
ich habe hier eine QT-dll, auf deren Funktionen ich aus LabVIEW zugreifen möchte bzw. muss.
Das vi "Call Library Function Node" kann in diesem Fall die Header nicht auslesen und somit die Funktionen nicht verwenden.
Gibt es eine andere Möglichkeit um auf Funktionen aus QT-dlls zuzugreifen?
Gruß, Nicky
Erst einmal die Call Library Node liest keine Header [aus]. Das tut allenfalls der Import Library Wizard aber der kann sich nicht durch C++ Header hindurchfressen und auch komplexe Standard C Headerhierarchien sind ihm manchmal etwas zu schwer verdaulich.
QT nehme ich an meinst Du das entsprechende API von Trolltech. Soviel ich weiss ist das vollumfänglich C++. Da es keinen allgemein gültigen Binärstandard gibt wie C++ Objektklassen exportiert werden, kann LabVIEW auch keine Funktionen bereitstellen, um diese zu importieren. Jeder Compiler hat da nämlich seine eigenen Vorstellungen von Virtual Table Layout, Method Name Decorations und viele andere kleine und teilweise weitreichende Details. Man kann deshalb C++ Objektdateien von dem einen Compiler beinahe nie mit einem anderen Compiler verwenden da nicht nur das Objektfileformat verschieden ist sondern auch das binäre Layout der Objekte.
Die einzige Möglichkeit um ein C++ API in LabVIEW zu integrieren ist dieses API zu wrappen. Das kann eine Standard C Wrapper DLL sein die für jede Objektmethode und -Variable auf die zugegriffen werden soll eine entsprechende Funktion exportiert, oder ein ActiveX oder eventuel .Net Wrapper der die C++ Objektklassen in entsprechende COM (ActiveX) oder .Net Klassen umsetzt.
So oder so kommt man um die Erstellung einer extra DLL nicht umhin. Dabei hat bei mir die Standarad C DLL den Vorzug da ich mich am Besten damit auskenne. Im Hinblick auf QT kommt auch noch dazu, dass eine solche DLL mit nicht allzu grossem Aufwand auch nach shared Libraries für andere LabVIEW Platformen portiert werden kann.