LabVIEWForum.de - parametertyp - datenzeiger: kein Anschluß unter dieser Kiste

LabVIEWForum.de

Normale Version: parametertyp - datenzeiger: kein Anschluß unter dieser Kiste
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo,

in einem Bibliotheksknoten für einen Parameter den Typ Datenzeiger anzugeben, bedeutet, die Anschlußmöglichkeit für diesen Parameter zu verlieren....
Wie übergebe ich denn der Funktion den Pointer auf zuvor allokierten Speicher???

Hat da mal jemand ein Beispiel?
Vielen Dank!!!

Grüße
t4b-1re-2
' schrieb:in einem Bibliotheksknoten für einen Parameter den Typ Datenzeiger anzugeben, bedeutet, die Anschlußmöglichkeit für diesen Parameter zu verlieren....
Das verstehe ich nicht.

Wie stellst du fest, dass die Anschlussmöglichkeit verloren geht? Welchen Anschluss meist du? Einen Eingang in den Knoten hinein oder einen Ausgang aus dem Knoten hinaus?

Zitat:Wie übergebe ich denn der Funktion den Pointer auf zuvor allokierten Speicher???
Gehe ich richtig in der Annahme, dass du in der DLL Speicher bereitstellen willst, mit dem LV arbeiten soll? Oder umgekehrt?
Zitat:Wie stellst du fest, dass die Anschlussmöglichkeit verloren geht? Welchen Anschluss meist du? Einen Eingang in den Knoten hinein oder einen Ausgang aus dem Knoten hinaus?
Ja genau, es gibt keine möglichkeit mehr, dem Parameter einen Eingangsanschluß oder einen Ausgangsanschluß zu verpassen (also Draht ziehen). Ein entsprechendes Feld im Bibliotheksknoten ist zwar noch vorhanden, aber es ist ausgegraut und kann nicht verbunden werden.

Zitat:Gehe ich richtig in der Annahme, dass du in der DLL Speicher bereitstellen willst, mit dem LV arbeiten soll? Oder umgekehrt?
ich will in LV Speicher allokieren, den Pointer auf diesen Speicher an die DLL übergeben - die schreibt in den Speicherbereich - und anschließend hät ich den Pointer gern zurück um mit LV aus dem gezeigten Speicherbereich zu lesen..

Viele Grüße
t4b-1re-2
' schrieb:es gibt keine möglichkeit mehr, dem Parameter einen Eingangsanschluß oder einen Ausgangsanschluß zu verpassen (also Draht ziehen). Ein entsprechendes Feld im Bibliotheksknoten ist zwar noch vorhanden, aber es ist ausgegraut und kann nicht verbunden werden.
Hmm. Ich kann mir das jetzt zwar nicht so vorstellen und wüsste auch nicht wie das passieren soll - aber wenn du das sagst, wird das wohl auch so sein. Kannst du mal ein Muster-VI machen, an dem man den Fehler sieht, und hier zusammen mit der (Muster-)DLL einstellen?

Zitat:ich will in LV Speicher allokieren, den Pointer auf diesen Speicher an die DLL übergeben - die schreibt in den Speicherbereich - und anschließend hät ich den Pointer gern zurück um mit LV aus dem gezeigten Speicherbereich zu lesen
Jawohl. Genau so mach ich's auch immer. Geht wunderbar. Ich würde es aber so erklären: Du stellt in LV Speicher zur Verfügung - z.B. ein String oder ein Array - und übergibst einen Pointer dort drauf (Datenzeiger) an die DLL. Die schreibt dann an den Pointer ihre Daten. Zurückgeben tut die DLL allerdings nichts, respektive keinen Pointer. Alleine nach dem Beenden des DLL-Knotens stehen bereits in LV, also im reservierten Bereich String oder Array, die gewünschten Daten.
Hallo,
die Bibliothek ist die libpq.dll [attachment=9578] von PostgreSQL (das ist das C-Interface). die Doku dazu findest du hier: http://www.postgresql.org/docs/8.2/interac...PQ-COPY-RECEIVE
Es geht um die Funktion PQgetCopyData
also, Diagramm:
[attachment=9577]
für buffer ist eben als Parametertyp Datenzeiger angegeben, das ist das dritte Feld von oben, wie du siehst ist es ausgegraut und gibt keine Möglichkeit einen Draht rannzuklemmen.

Hast du vielleicht mal ein Beispiel für mich wo du mit dem Datenzeiger arbeitest?

Viele Grüße
t4b-1re-2
Also ich mache das immer so, wie in dem Bild.
Ich verwende auch noch LV7.1, in LV8.2 habe ich gesehen, dass da zusätzliche Optionen drinn sind.
Wozu, wie die zu verwenden sind, weis ich auch nicht.

Gruss
Roland

Guest

Ich ackere am selbe Problem. Wobei es bei mir noch etwas komplizierter ist, da ich eine Struktur in C habe, die auch Arrays enthalt. Die Struktur selbst kann durch Cluster abgebildet werden. Wie in http://www.LabVIEWforum.de/index.php?showtopic=7512 erwähnt muß dieses Cluster in LabVIEW initialisiert - also Speicher allokiert werden. Vielleicht habe ich auch da noch einen Fehler.

Wie ich das mit dem Array lösen soll ist mir noch nicht klar. Da in LabVIEW die Arrays dynamisch sind, wird die Arraylänge vorangestellt, was in C dann natürlich nicht passt. Einzige Lösung scheint wohl zu sein statt Arrays ebenfalls Cluster zu verwenden, wobei dann aber die Größe bekannt sein muß und dieses Cluster dann "von Hand" angelegt werden muss!? http://forums.ni.com/ni/board/message?boar...uireLogin=False

Dein Problem liegt glaube ich am Parametertyp Datenzeiger:

(..hmm.. wie kriege ich hier den Screenshot rein?? Habs nun als Anlage).

Wozu der gut ist weiß ich nicht. Die Beschreibung dazu ist recht dürftig. Wenn ich das auswähle, kommt bei mir auch der Fehler dass die Verbindung ungültig ist.

Aber wenn Du Datentyp: "An Datentyp anpassen verwendest" dann kannst Du auch verbinden. Was dann bei "Format" einzustellen ist, ist mir allerdings auch nicht klar. Vielleicht kann ich Dir morgen mehr sagen, wenn es denn bei mir klappen sollte.
' schrieb:Dein Problem liegt glaube ich am Parametertyp Datenzeiger:
Stimmt.

Macht es so, wie bei RoLe steht: Als [u]Parametertyp[/u] wird String (oder Numerisch etc) gewählt. Bei Datenformat wird "Zeiger in Wert" verwendet. (Alles andere ist speziell für LV und für höhere Ebenen)
' schrieb:Also ich mache das immer so, wie in dem Bild.

danke dir. mein stand ist: die Funktion läuft ohne Speicherzugriffsverletzung. Dabei ist egal, ob ich als Pointer ein Array initialisiere und so wie du als bytearray in einen String umwandel oder einfach einen leeren String. Denn egal was ich tue stehen am ende in dem String nur seltsamste komische Sonderzeichen.

Und also probier ich weiter...

Viele Grüße
t4b-1re-2
Mal 'ne andere Frage....

Ich verwende auch PostgreSQL, aber mit DLLs habe ich da nichts zu tun.... Was hast Du denn vor?

Gruß Markus

' schrieb:danke dir. mein stand ist: die Funktion läuft ohne Speicherzugriffsverletzung. Dabei ist egal, ob ich als Pointer ein Array initialisiere und so wie du als bytearray in einen String umwandel oder einfach einen leeren String. Denn egal was ich tue stehen am ende in dem String nur seltsamste komische Sonderzeichen.

Und also probier ich weiter...

Viele Grüße
t4b-1re-2
Seiten: 1 2 3
Referenz-URLs