LabVIEWForum.de - String in char* Umwandeln

LabVIEWForum.de

Normale Version: String in char* Umwandeln
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe LabVIEW Gemeinde,

hier ist ein Funktionsprototyp von einer DLL,
extern "C" CALLBACK __export int AllVarDataDownload(unsigned char com,unsigned char addr,char *filename,void(*fktptr)(),void(*errptr)(int errcode)); //write to inverter

Zur Erklärung, ich möchte eine VarData Datei in einen Umrichter schieben.
Die Funktion AllVarDataDownload soll dies ermöglichen.
unsigned char com ist die Schnittstelle
unsigned char addr ist die Adresse vom Umrichter

soweit ist noch alles im grünen Bereich.

Jetzt zu meiner Herausforderung,

der Variablen *filename vom Typ char muss ich einen String übergeben der auf die benötigte Datei zeigt.
Wie schaffe ich es diesen String so umzuwandeln, dass ich auch noch genügend Speicher zuweise und dass die DLL es auch noch versteht.

Meine andere Herausforderung sind die nächsten Kandidaten.

void(*fktptr)(),void(*errptr)(int errcode)

hier weiß ich nur sie für den Ladebalken bei der Übertragung zuständig sind. Habe aber meine Schwirigkeiten bei der Initialisiereung der DLL wegen der Klammern.

Ich hoffe dass mich jemand verstanden hat. Big Grin

Viele Grüße

Nico

meine bisherige Lösung:


[attachment=3233]
Ich würde es so ausprobieren.

Gruss, Eugen
' schrieb:Ich würde es so ausprobieren.

Gruss, Eugen


Hallo Eugen,


vielen Dank für den Tipp!
leider bringt er immer noch dass ein Ausnahmefehler aufgetreten ist. Der LabVIEW Speicherbereich kann daher fehlerhaft sein.
Hab auch mal an den Parametern gedreht und bin bis 255 gegangen.
Vielleicht ist der Ansatz ja richtig und der Fehler liegt bei meinen folgenden Parametern. Ich weiß halt nicht was ich mit der leeren Klammer bei void(*fktptr)() machen soll.
Ich teste noch fleißig weiter.

Gruß

Nico


[attachment=3236]
' schrieb:Ich weiß halt nicht was ich mit der leeren Klammer bei void(*fktptr)() machen soll.
Die "leere Klammer" ist der Parameter-Header der Funktion, die übergeben werden soll. Leer => Keine Parameter. Das Problem sehe ich nicht in der leeren Klammer, sondern in der Tatsache, dass eine Funktion im Sinne von C++ übergeben werden muss. Kann LV ohne weiteres sowas? Möglicherweise kann man einen NULL-Pointer (bzw. eine Variable mit Inhalt NULL-Pointer) übergeben, sodass die DLL keinen Balken anzeigt.
' schrieb:extern "C" CALLBACK __export int AllVarDataDownload(unsigned char com,unsigned char addr,char *filename,void(*fktptr)(),void(*errptr)(int errcode));
Zitat:void(*fktptr)(),
Siehe oben.
Zitat:void(*errptr)(int errcode)
Da hier kein Komma zwischen ")(" steht, gehört das zusammen. Es sind also nicht zwei Parameter so wie in deinem DLL-Knoten. [*grübel*] Auch das sieht wie eine funktion aus mit Parameter ErrCode - eigentlich ein Pointer auf eine Funktion mit Parameter.
' schrieb:Möglicherweise kann man einen NULL-Pointer (bzw. eine Variable mit Inhalt NULL-Pointer) übergeben, sodass die DLL keinen Balken anzeigt.


Ich weiß ehrlich gesagt nicht wie ich in LabVIEW eine Variable mit Inhalt NULL-Pointer übergebe.
Kann mir jemand weiterhelfen?

Grüße

Nico
' schrieb:Ich weiß ehrlich gesagt nicht wie ich in LabVIEW eine Variable mit Inhalt NULL-Pointer übergebe.
Ich auch nicht.

Aber probier' mal folgendes:
Definiere eine 32Bit-UInt-Variable. Die Variable belegt du mit Null (0x00000000). An die DLL übergibst du diesen Parameter als "Typ: numerisch; Datentyp: UInt; Übergabe: Zeiger auf Wert". Diese Vorgehensweise machst du für die beiden Parameter FktPtr und ErrPtr. Dein DLL-Knoten hat dann 5 Parameter.

Und: Ohne Gewähr - versteht sich.
Hallo zusammen,

ich bin immer noch am rätseln wie man einen string pointer übergibt.
Mein Stolperstein ist, dass die dll ein char* erwartet und ich soll ein string laut beschreibung übergeben.

Beschreibung: "Der Aufruf der VarData-Funktionen wird durch direkten Start der Funktion AllVarDataDownload(...) durchgeführt. In der Header-Datei sind die Parameter (mit Datentypen) aufgelistet, die übergeben werden sollen."

Ist soweit in Ordnung

Beschreibung: "In der AllVarDataDownload wird direkt der Dateiname übergeben, sodass die Datei nicht zuerst eingelesen werden muß."

Hier gebe ich einfach den Pfad+Dateiname mit Dateiendung an.

Beschreibung: "Der Dateiname muss als String mit x Zeichen übergeben werden. Dabei ist auch wichtig, dass dieser String mit einem 0-Byte abgeschlossen ist." Blink

Beschreibung: "Dieser String wird als Pointer an die Funktion übergeben."

Wie soll man das machen wenn die DLL ein char erwartet.

mein bisheriger Entwurf, siehe unten.

bin für jeden tipp zu haben



[attachment=3270]
Probiertst du die Übergabe so wie "Window Name" nach FindWindow in folgendem VI.
Referenz-URLs