INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Methodenaufruf aus Zeigern auf Klassenelementen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

03.08.2007, 12:27
Beitrag #1

md-knight Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Aug 2007

8.2
-
kA


Deutschland
Methodenaufruf aus Zeigern auf Klassenelementen
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.08.2007, 10:56
Beitrag #2

IchSelbst Online
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Methodenaufruf aus Zeigern auf Klassenelementen
' schrieb: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.

Auch ich habe da meine Bedenken. Für Methodenzeiger mit LV bin ich nicht der Experte.

Eigentlich ist LV nicht dafür gedacht ein Unterprogramm (ob VI oder DLL-Knoten) indirekt über einen expliziten Methodenzeiger aufzurufen. Sowas würde zwar auch in einer Datenflusssteuerung funktionieren - allerdings eben nur wenn dieses Feature integriert wäre. Mir jedenfalls ist dieses Feature noch nicht über den Weg gelaufen. Methodenzeiger haben ein ganz spezifisches Format und bedürfen einer ganz bestimmten Verarbeitung. Dieses Format und die Verarbeitung ist so einfach in LV mit "Standard-Komponenten" nicht umsetzbar. Möglicherweise gibt es aber irgendwo in ni.com ein VI, was sowas kann.

Der Zeiger auf den Puffer ist auf jeden Fall in LV handlebar.

Was immer geht ist eine Wrapper-DLL.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.08.2007, 10:27
Beitrag #3

md-knight Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Aug 2007

8.2
-
kA


Deutschland
Methodenaufruf aus Zeigern auf Klassenelementen
Dachte ich mir.

Trotzdem danke, so kann ich mich guten Gewissens an den Workarround machen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.08.2007, 10:31 (Dieser Beitrag wurde zuletzt bearbeitet: 24.08.2007 10:32 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Methodenaufruf aus Zeigern auf Klassenelementen
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: