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!
' 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!
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
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)
' 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).
[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!
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.)
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.
' 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).
' 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?