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 

Übergabe von Datenzeiger



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!

16.01.2008, 10:30
Beitrag #1

Cubaner Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Jul 2006

LV 8.2.1
2006
kA


Deutschland
Übergabe von Datenzeiger
Hallo liebe LabVIEW Gemeinde,

ich habe ein Problem mit der Übergabe von Datenzeigern in LabVIEW.
Kurz zur Problembeschreibung. Ich will mit hilfe einer dll, und einer Funktion aus dieser dll, eine Datei in einen Umrichter schreiben. Leider gelingt es mir noch nicht ganz dies zu realisieren. Zur besseren Darstellung hier mal die Funktion, die Probleme bereitet.

int CALLBACK _export AllVarDataDownload (unsigned char com, unsigned char addr, char *filename, void(*fktptr)()=NULL, void(*errptr)(int errcode)=NULL)

Zur Erklärung der Funktion: com = COM-Port (macht kein Problem),
addr = Adresse des Umrichters (macht kein Problem),
*filename = ist der Dateipfad (LabVIEW übergebe ich hier einen C-Pointer mit der Größe des Strings in meinem Beispiel 42Byte)
Jetzt die Große Herausforderung für mich: void(*fktptr)()=NULL und void(*errptr)(int errcode)=NULL sind ja Datenzeiger die auf nichts zeigen. Oder verstehe ich das ganz falsch?

Im Anhang ist ein Bild von meinem bisherigen Entwurf. In diesem Beispiel habe ich einfach diese Datenzeiger nicht berücksichtigt, da sie eh NULL sind.

Zu meinem Erstaunen geht bei der Ausführung des VI´s der Umrichter in einen Fehler. d.h. ja schon mal das etwas passiert.

Jetzt meine Fragen:

1. Weiß jemand wie ich diese Datenzeiger korrekt übergeben kann?

2. könnte es eventuell doch an der Übergabe des C-Pointers (Dateipfad) liegen?



Ich danke schon mal all denjenigen die sich dieser Herausforderung widmen.

Viele Grüße,

Nico


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.01.2008, 10:41
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergabe von Datenzeiger
' schrieb:*filename = ist der Dateipfad (LabVIEW übergebe ich hier einen C-Pointer mit der Größe des Strings in meinem Beispiel 42Byte)
Ich würde hier "Zeiger auf Daten" empfehlen.

Zitat:Jetzt die Große Herausforderung für mich: void(*fktptr)()=NULL
Hier KANN eine Funktion übergeben werden. Diese würde wohl als Callback aufgerufen werden. Wird in C++-Programmierung hier kein Wert angegeben, so macht der C++-Kompiler automatisch NULL. In LV geht das so aber nicht. Erstens kann man in LV keine Callbacks in dieser Art hier machen. Zweitens MUSST du hier einen Parameter angeben. Also musst du deinen DLL-Knoten erweitern um diesen Parameter, dem du den Wert 0 (U32) übergibst.

Zitat:void(*errptr)(int errcode)=NULL
Gleiches gilt für diesen Parameter, der auch eine Funktion darstellt.

Dein DLL-Knoten muss genau so viele Anschlüsse haben, wie im Prototyp der aufzurufenden Funktion definiert sind.

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
16.01.2008, 11:37
Beitrag #3

Cubaner Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Jul 2006

LV 8.2.1
2006
kA


Deutschland
Übergabe von Datenzeiger
Hey IchSelbst,

vielen vielen Dank für die sehr guten Tipps!!!
Es funktioniert!!
Du bist spitze! Guru1

' schrieb:Ich würde hier "Zeiger auf Daten" empfehlen.
nur hier ist ein C-Pointer der richtige Weg.

Bei den anderen Tipps lagst du vollkommen richtig.

Nochmals vielen Dank!!!

Gruß

Nico
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.01.2008, 13:18 (Dieser Beitrag wurde zuletzt bearbeitet: 22.01.2008 13:18 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Übergabe von Datenzeiger
' schrieb:Hey IchSelbst,

vielen vielen Dank für die sehr guten Tipps!!!
Es funktioniert!!
Du bist spitze! Guru1
nur hier ist ein C-Pointer der richtige Weg.

Nun wahrscheinlich machst Du es gut, aber drückst Du dich nicht ganz korrekt aus. Am Einfachsten sollte das gehen indem man den Parameter als String und dann als C String Pointer konfiguriert. Kann man dan, direkt einen LabVIEW String damit verbinden. Ein C pointer könnte auch ein Array Pointer sein.

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 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL mit String Nullpointer Übergabe Hubert R. 5 5.931 25.08.2023 11:43
Letzter Beitrag: rolfk
  Übergabe eines struct arrays an eine DDL und wieder Auslesen SK-AC 4 7.220 12.08.2010 17:01
Letzter Beitrag: rolfk
  Mehrere Cuda DLLs Context-Übergabe grey 2 6.121 17.06.2010 19:50
Letzter Beitrag: rolfk
  LV 7.1, VC++-DLL (VC++2008), string-Übergabe ptillmann 1 5.159 12.03.2010 20:34
Letzter Beitrag: rolfk
  Unhandled exception bei Übergabe eines CArrays abrissbirne 8 9.161 25.04.2008 23:31
Letzter Beitrag: abrissbirne
  Übergabe eines C Array abrissbirne 1 5.013 13.04.2008 22:12
Letzter Beitrag: rolfk

Gehe zu: