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:achso, hab dann mal noch nen bisschen rumprobiert und einfach in den knoten der ext. bibl. noch ne weitere variable eingefügt. einfach nur nen zeiger auf wert.. da meckert der aber direkt beim kompilieren obwohl ich nur *a=*a; mache..
kann man die nicht mehr verändern oder mach ich mal wieder nur nen dummen fehler?
Dummer Fehler?
Wer meckert beim Kompilieren? Der C-Compiler? Nur der kennt *a=*a;. Dann hat das aber nix mit LV zu tun. Oder meckert LV? Woher soll der was von *a wissen?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:aber das problem ist, dass wenn ich in LabVIEW die while-schleife rein mache, wie in dem 2.bild, dann kommt eben die fehlermeldung in LabVIEW, dass ein ausnahmefehler aufgetreten ist.. passiert beim 2. durchlauf.. daher der lange timeout..
Nur weil beim ersten Durchlauf - noch - nichts passiert, heißt das noch nicht, dass alles richtig geht.
Der von dir beschriebene Fehler kann auftreten, wenn ein Parameter falsch übergeben wird. Oder selbstverständlich, wenn in der DLL ein Speicher überschrieben wird.
[*grübel*]
Bin ich überhaupt richtig mit meiner Annahme: Du erstellt eine C++-DLL und willst die in LV einbinden?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Wer meckert beim Kompilieren? Der C-Compiler? Nur der kennt *a=*a;. Dann hat das aber nix mit LV zu tun. Oder meckert LV? Woher soll der was von *a wissen?
ja, der compiler meckert. wie gesagt, hab nen bisschen rumprobiert. in dem tutorial hier wirds ja auch so gemacht *erg=*a+*b; und das hat bei mir funktioniert, daher verstehe ich nich, was ich da falsch mache und hab gedacht, man kann in LabVIEW, wenn man einmal einen knoten fertig hat, den nicht mehr ändern..
lv meckert hier bei dem problem nicht, is wie gesagt durch rumprobieren entstanden.
das problem, das LabVIEW hat, war schon vorher da, als noch alles richtig kompliliert worden ist.
' schrieb:Nur weil beim ersten Durchlauf - noch - nichts passiert, heißt das noch nicht, dass alles richtig geht.
Der von dir beschriebene Fehler kann auftreten, wenn ein Parameter falsch übergeben wird. Oder selbstverständlich, wenn in der DLL ein Speicher überschrieben wird.
[*grübel*]
Bin ich überhaupt richtig mit meiner Annahme: Du erstellt eine C++-DLL und willst die in LV einbinden?
ja, richtig, erstelle eine c++-DLL die ich in LabVIEW einbinden will. bzw baue mir den knoten in LabVIEW und erstell dann den c++-code..
beim ersten durchlauf passiert ja schon was, also er invertiert das bild und gibt es auch aus.. und beim 2. aufruf kommt dann der fehler.
denke auch, dass es was mit dem speicher zu tun hat.
was meinst du mit, wenn in der dll ein speicher überschrieben wird? es kommt ja in jedem fall nen neues bild rein, muss man das alte bild dann erst löschen? hätte gedacht, dass das einfach überschrieben wird.. und wenn ja, wie leert man den speicher?
01.10.2008, 13:07 (Dieser Beitrag wurde zuletzt bearbeitet: 01.10.2008 13:13 von IchSelbst.)
Hmm. Nich so das wahre für Programmieren einer DLL-Schnittstelle. Das Ausprobieren.
Zitat:in dem tutorial hier wirds ja auch so gemacht *erg=*a+*b; und das hat bei mir funktioniert
So genau hab ich die Syntax und die Typen von C++ gerade nicht im Kopf. Pointeroperationen sind immer gefährlich - zumal in C++. Sourcecode von C++ und die LV-VI wäre hier aussagekräftiger als Prosatext.
Zitat:hab gedacht, man kann in LabVIEW, wenn man einmal einen knoten fertig hat, den nicht mehr ändern..
Du kannst jederzeit den DLL-Knoten neu parametrieren.
Zitat:baue mir den knoten in LabVIEW und erstell dann den c++-code..
:wacko:Ich mach das immer umgekehrt. Ich erstelle zuerst die DLL mit dem C++-Code und dann den DLL-Knoten in LV.
Zitat:was meinst du mit, wenn in der dll ein speicher überschrieben wird?
Du könntest z.B. die Daten, die in den Datenbreich gehören, an die Stelle schreiben, wo LV die Anzahl der Daten (Array-Länge) erwartet. Das geht mit Pointer hervorragend. Oder du schreibst gleich auf den Array-Handle. Sowas meinte ich mit "Speicher überschreiben". Oder du willst mehr Daten speichern als Speicher alliziert ist.
Zitat:es kommt ja in jedem fall [nen neues bild rein, muss man das alte bild dann erst löschen?
Nein.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Ich hab da glaube ich in meinem ersten Hinweis Zeile und Spalte vertauscht.
Gruß, Jens
P.S.: While-Schleife, For-Schleife, wo ist der Unterschied. Und Sorry, habe ich übersehen, dass die ganz aussen ist. In deinem 2. Screenshot, ist da auch die Funktion eine andere? Der Knoten ist ja anders definiert?!
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:P.S.: While-Schleife, For-Schleife, wo ist der Unterschied. Und Sorry, habe ich übersehen, dass die ganz aussen ist. In deinem 2. Screenshot, ist da auch die Funktion eine andere? Der Knoten ist ja anders definiert?!
erstmal danke für die hilfe, an euch beide.
ja, in dem 2. screenshot ist die funktion auch ne andere, eben mit dem *a=*a problem... wollte nur die fehlermeldung zeigen. die war vorher die gleiche..
naja, hat sich aber erstmal erledigt. haben ne neue kamera, und da LabVIEW die nicht erkennt, muss ich dafür jetzt erstmal ne dll einbinden. das kann was weden ^^
hab das *a=*a mal unter die schleife (in c) getan, funzt.. habe dann noch ne variable dazugenommen, damit das auch bei verschiedenen bildgrößen funktioniert, und danach nochmal ne while schleife ausprobiert und hat auch funktioniert. wobei man die erst ab dem grab also nach dem config und imaq baustein ansetzen sollte.