29.01.2007, 16:50
|
Semtex
LVF-Grünschnabel
Beiträge: 22
Registriert seit: Jan 2007
7.1
2002
kA
Oesterreich
|
Buffer
' schrieb:Ich bin noch immer der Meinung, dass das so nicht gehen wird.
Wenn die DLL einen Pointer erwartet - UND DAS TUT SIE - musst du ihr einen geben.
Sodala, die letzten 10min bin ich im Kreis herumgesprungen und habe mich gefreut *g* also das Programm läuft! Es ist nur noch eine Sache, und zwar das die Pufferelemente nach dem DLL Block noch immer gleich sind wie am Anfang. Aber das liegt woll an der leeren Batterie von unserem Signalgenerator.
VIELEN VIELEN VIELEN DANK!!!
Also ich hoffe das funktioniert jetzt. also bis jetzt sieht es sehr gut aus!
|
|
|
05.02.2007, 08:29
|
Semtex
LVF-Grünschnabel
Beiträge: 22
Registriert seit: Jan 2007
7.1
2002
kA
Oesterreich
|
Buffer
' schrieb:Und was hast du jetzt noch angepasst?
Ich habe deinen "Rat" befolgt und als Buffer nur einen einzigen Pointer übergeben:
unsigned long GT_GetData(long hDevice, unsigned short int *pBuffer, unsigned long *lpOvl);
*pBuffer ist eine FOR-Schleife mit 1024 erzeugten Werten. Ob unsere DLL nun die erzeugten werde am "Ausgang" ändert ist fraglich, Hardwaretests konnten wir bis jetzt noch nich erzeugen!
Vielen Dank für deine Hilfe! Sollte es noch Fragen geben poste ich sowieso wieder
|
|
|
12.02.2007, 11:20
|
Semtex
LVF-Grünschnabel
Beiträge: 22
Registriert seit: Jan 2007
7.1
2002
kA
Oesterreich
|
Buffer
Sodala, neuer Montag, neue Frage, neues Glück!
Mahlzeit alle miteinander.
Jetzt habe ich wieder einmal eine ganz nette Frage, die wie folgt lautet:
Ich habe 3 Werte, jeweils 4 Byte
Ich will nun diese 3*4 Byte (Pointer, Buffer size, Buffer validpoints) hinterinander "schateln"
Das heißt ich will 12 Byte haben, wobei die 1. 4 byte den Wert von "Pointer", die 2. 4 Byte den Wert von Buffer size, und die 3. 4 Byte den Wert von validpoints enthalten.
Hat jemand eine Idee? Gibt es überhaupt einen 12 Byte Datentyp? (das wird dann in eine DLL übergeben als Zeiger)
"Pointer" soll dann der Zeiger auf ein 1024-Werte 1D-Array sein (siehe oben)
Würde mich auf antworten freuen,
so long
|
|
|
12.02.2007, 13:17
|
IchSelbst
LVF-Guru
Beiträge: 3.689
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Buffer
' schrieb:Ich habe 3 Werte, jeweils 4 Byte
Ich will nun diese 3*4 Byte (Pointer, Buffer size, Buffer validpoints) hinterinander "schateln"
Sieht sehr nach Cluster aus - oder (Byte-)Stream - oder PChar.
Zitat:Gibt es überhaupt einen 12 Byte Datentyp? (das wird dann in eine DLL übergeben als Zeiger)
Klar doch. PChar der Länge 12.
Nachdem ich gelesen habe, was du in naiver Weise so einfach geschrieben hast, komme ich zu dem Ergebnis, dass dein Vorhaben - zumindest der erste Schritt - doch lösbar sein könnte. Im Prinzip kannst du auch in LV irgendwas, also auch numerische Werte, in einen PChar schreiben. Diesen PChar kannst du an die DLL übergeben - per ein Pointer. Die DLL würde nicht merken, respektive es würde sie nicht interessieren, dass die Daten nicht aus einem Cluster (was die Daten eigenlich darstellen) kommen sondern aus einem PChar. Diese Methode ist dann aber eine manuell-brachiale, ist völlig gegen alle Programmierkonventionen - und sollte eigentlich vermieden werden.
Zitat:"Pointer" soll dann der Zeiger auf ein 1024-Werte 1D-Array sein (siehe oben)
Alleine das macht Probleme - und zwar erhebliche bis unlösbare.
Hab ich dich schon mal gefragt, ob du eine Wrapper-DLL schrieben kannst respektive an eine kommen könntest?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
12.02.2007, 14:44
|
Semtex
LVF-Grünschnabel
Beiträge: 22
Registriert seit: Jan 2007
7.1
2002
kA
Oesterreich
|
Buffer
[quote name='IchSelbst' post='22489' date='12.02.2007, 13:17']Sieht sehr nach Cluster aus - oder (Byte-)Stream - oder PChar.
Klar doch. PChar der Länge 12. [/quote]
PChar ist ja ein C-String oder?
[quote name='IchSelbst' post='22489' date='12.02.2007, 13:17']Im Prinzip kannst du auch in LV irgendwas, also auch numerische Werte, in einen PChar schreiben. Diesen PChar kannst du an die DLL übergeben - per ein Pointer. Die DLL würde nicht merken, respektive es würde sie nicht interessieren, dass die Daten nicht aus einem Cluster (was die Daten eigenlich darstellen) kommen sondern aus einem PChar.[/quote]
Wie stell ich das ein, dass der PChar per Pointer übergeben wird? [/quote]
[quote name='IchSelbst' post='22489' date='12.02.2007, 13:17']Alleine das macht Probleme - und zwar erhebliche bis unlösbare.
Hab ich dich schon mal gefragt, ob du eine Wrapper-DLL schrieben kannst respektive an eine kommen könntest?[/quote]
Was ist eine Wrapper-DLL? Nein kann ich nicht!
|
|
|
12.02.2007, 15:25
|
IchSelbst
LVF-Guru
Beiträge: 3.689
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Buffer
' schrieb:PChar ist ja ein C-String oder?
Richtig.
Zitat:Wie stell ich das ein, dass der PChar per Pointer übergeben wird?
PChar geht nur mit Pointer, das ist ja der Trick dabei. In LV geht das dann wie folgt: Du nimmt einen ganz normalen String und packst deine Daten da rein (wie die du da reinbringst, das ist wieder was anderes). Den String gibst du auf den DLL-Knoten und sagst als Typ "String - Zeiger auf Daten". Das ist dann praktisch ein PChar.
Zitat:Was ist eine Wrapper-DLL?
Die Wrapper-DLL wird zwischen das LV-Programm und die "User-DLL" geschaltet. Die Wrapper-DLL hat zur LV-Seite hin eine LV-kompatible Schnittstelle und zur User-DLL hin eine User-DLL-kompatible Schnittstelle. Beide - LV und User-DLL - merken nichts davon respektive dürfen nichts davon merken, dass zwischen ihnen noch jemand steht. Die Wrapper-DLL konvertiert zwischen den beiden Schnittstellen hin und her. Prinzipiell muss die Warpper-DLL keine DLL sein, ein funktionsgleiches Programm welcher Art auch immer tuts auch.
Und nicht vergessen - das mit dem Pointer im Cluster. Noch ist mir hierfür keine LV-kompatible Lösung im Sinne eines Datenfluß-kompatiblen Algorithmusses eingefallen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
26.02.2007, 09:28
(Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2007 09:32 von Semtex.)
|
Semtex
LVF-Grünschnabel
Beiträge: 22
Registriert seit: Jan 2007
7.1
2002
kA
Oesterreich
|
Buffer
' schrieb:Richtig.
PChar geht nur mit Pointer, das ist ja der Trick dabei. In LV geht das dann wie folgt: Du nimmt einen ganz normalen String und packst deine Daten da rein (wie die du da reinbringst, das ist wieder was anderes). Den String gibst du auf den DLL-Knoten und sagst als Typ "String - Zeiger auf Daten". Das ist dann praktisch ein PChar.
Hab aber nur diese Auswahlmöglichkeiten:
Was sagst du zu dieser Lösung:
|
|
|
26.02.2007, 10:43
|
IchSelbst
LVF-Guru
Beiträge: 3.689
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Buffer
' schrieb:Hab aber nur diese Auswahlmöglichkeiten:
Genau an die hab ich gedacht.
Zitat:Was sagst du zu dieser Lösung:
Das wird nicht gehen. Du übergibst hier ein Array, keinen Pointer auf ein Array. Was du brauchst ist aber ein Pointer auf das Array. Du wirst da nicht um eine Wrapper-DLL herumkommen - solange mir (oder jemand anderem) nichts entsprechendes einfällt.
Im Übrigen kann die For-Schleife durch eine bestehende Funktion ersetzt werden: Array erstellen bzw. initislisieren.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
26.02.2007, 11:58
|
Semtex
LVF-Grünschnabel
Beiträge: 22
Registriert seit: Jan 2007
7.1
2002
kA
Oesterreich
|
Buffer
' schrieb:Das wird nicht gehen. Du übergibst hier ein Array, keinen Pointer auf ein Array. Was du brauchst ist aber ein Pointer auf das Array. Du wirst da nicht um eine Wrapper-DLL herumkommen - solange mir (oder jemand anderem) nichts entsprechendes einfällt
Also soweit ich weiß meinst du einen c-code selber schreiben, welcher dies dann umwandelt bzw einen pointer erstellen der auf das array zeigt!
Muss es eine DLL sein, oder kann das auch nur ein c-code sein?
Gibt es da von LabVIEW bereits Vorlagen?
|
|
|
| |