' schrieb:Ich habe ein unfreundliches Problem für daß es evtl. gar keine Lösung gibt.
Es geht um Ansteuerung einer Kodak Kamera über LabVIEW.
Die Mitgelieferte dll bietet nur einen Teil der Funktionen z.B. Öffnen der Kameras über USB und Rückgabe eines Zeigers auf ein Kamera Klassenelement.
Das Auslesen der Kameradaten erfolgt laut Beispielcode über die Memberfunction des Klassenelements, welches dann wiederum einen Zeiger auf den Puffer übergibt.
Möglicherweise kann ich diesen Zeiger auf die bekannte Klassenstruktur auf ein Array umlegen und Rückwandeln um an die Daten zu kommen, aber ich sehe keine Möglichkeit aus LabVIEW herraus die Memberfunction aufzurufen die mir den Datenpuffer zurückliefert.
Kennt jemand eine Lösung?
Einzige echte Alternative die ich sehe ist eine weitere dll zu erstellen, welche mir die Methode aufruft und gleich die Pufferadresse liefert.
Also Du sprichst da von Klassenelementen und das klingt ganz hässlich nach C++. WEnn dem so wäre wirds nicht gehen. LabVIEW kann nicht C++ Objekte direkt durch den Bibliotheksknoten aufrufen. Das fragt absolut sicher nach einer wrapper DLL die Dir zwischen C++ und dem Standard C API das der Bibliotheksknoten unterstützt, übersetzt.
Wenn es nur ein Funktionspointer ist, gibt es aber eventuel eine Möglichkeit. Nur ist die etwas umständlich und ein C Wrapper-DLL hat sich da bei mir bis jetzt noch allemal als die bessere Lösung herausgestellt. Du kannst in LabVIEW eventuel eine DLL generieren die eine Funktion exportiert, wessen Aufrufinterface kompatibel ist mit Deinem Funktionspointer. Ob das wirklich geht ist aber abhängig von den Parametern die diese Funktion benötigt.
Danach kannst Du mit der Windows APIs LoadLibrary() und GetProcAdress() einen Pointer zu dieser LabVIEW DLL Funktion erhalten und diesen an die entsprechende Funktion Deiner anderen Bibliothek geben. Die DLL ruft dann die LabVIEW DLL Funktion auf. Wie gesagt es ist nicht trivial und man braucht echt absolut alle Kenntnis die auch zum Eerstellen einer Wrapper DLL nötig ist um dies erfolgreich zu tun. Daher dass der direkte Gang zur Wrapper DLL für mich eigentlich immer den Vorrang hat.
Rolf Kalbermatter