' schrieb:ich meinte was ich unter Array-Format eingeben muss.
Wie du's im ersten Bild schon gemacht hast: Array-Data-Pointer.
Davon gehe ich zumindest aus. Genau hängt das natürlich vom Typ des Pointer ab. Poste doch mal den Funktionsprototyp, wie er in der DLL-Beschreibung angegeben ist.
Sollte ich vielleicht nicht tun,
da es eine firmenunterne DLL-Datei ist, die ich nicht nach außen geben darf.
Schreib ja meine Diplomarbeit und will mir so nichts kaputtmachen von wegen Betriebsgeheimnis und so.
Auch wenns nur ein paar simple Zeilen wären.
Bitte um Verständnis.
Trotzdem vielen Dank für Deine Hilfe soweit IchSelbst!
Vielleicht kannst Du mir noch kurz erklären wie herausfinde, ob die DLL mit C oder Standard-Variante aufgerufen werden muss.
MfG Daniel
' schrieb:Sollte ich vielleicht nicht tun, da es eine firmenunterne DLL-Datei ist, die ich nicht nach außen geben darf. Schreib ja meine Diplomarbeit und will mir so nichts kaputtmachen von wegen Betriebsgeheimnis und so. Auch wenns nur ein paar simple Zeilen wären.
Bitte um Verständnis.
Klar.
Zitat:Vielleicht kannst Du mir noch kurz erklären wie herausfinde, ob die DLL mit C oder Standard-Variante aufgerufen werden muss.
Auch das sollte in der Beschreibung der DLL stehen. Respektive irgendwo in den Einstellungen des C-Kompilers. Das eine heißt cdecl, das andere stdcall.
Im Prinzip kannst du das auch ausprobieren (das kann schneller gehen, als nachzuschauen). Wenn es cdecl sein muss und du benutzt stdcall, dann wird dir deine Applikation samt LV-IDE komplett abstürzen, nachdem der DLL-Knoten beendet wird - dann wars die falsche Methode.
Danke Dir nochmals recht herzlich für Deine Mühen.
Denke dass ich es jetzt hinbekommen müsste.
MfG Daniel
' schrieb:Hallo Leutz,
Hätte mal eine kurze Frage bzgl. Pointer und LabVIEW.
Habe schon im Tutorial gelesen, dass das nicht ganz verträglich ist.
Möchte ein Probeprogramm schreiben, das ich nicht unbedingt brauche, und möchte vorher abchecken ob das einfach zu machen ist, oder ob ich mir das spare.
Folgendes:
In meiner DLL-Beschreibung ist ein Parameter angegeben, der einen Pointer darstellt:
Pointer to the image buffer.
diese DLL soll einen Snapshot einer Kamera auslösen und ich vermute, dass der Pointer auf den Speicherplatz verweist.
Meine Frage ist nun, ob meine Vermutung richtig ist und wenn ja, kann ich das Bild/Image irgendwie einlesen bzw. anzeigen.
Gruß Daniel
Also abgesehen von den Sachen die schon erwähnt wurden ist die meist generische Weise um einen Buffer darzustellen, um ein Array von Bytes zu verwenden. Und hier hakts auch schon.
Um die Daten die Du zurückbekommst in ein sinnvolles Bild umwandeln zu können musst Du wissen was auf welche Weise in diesen Buffer geschrieben wurde. Bildinformationen sind sehr verschieden und können in unzähligen Formaten gestreamt werden. Ein paar Dinge die Du abklären musst:
- Ist vor den eigentlichen Bilddaten ein Header der die verschiedenen hiernach angegebenen Parameter in einem bestimmten Format definiert oder weisst Du sie von irgendwo anders?
- Wieviele Bits hat jedes Pixel?
- Wie ist die Farbe codiert? Im Pixel selber oder über eine Farbpalette und wieviele Bits für jede der drei Grundfarben.
- Was ist das Padding? Das beschreibt auf wieviele Bytes jede Bildzeile aufgefüllt wird, wenn sie nicht ein Vielfaches dieses Wertes lang ist.
- Was sind die Abmessungen (Breite und Höhe) des Bildes? Die Bilddaten sind ein einziger Stream von Datenbytes und um ein Bild zu erhalten musst Du das irgendwie wieder zurückwandeln.
- Wurde irgendeine Kompression benützt?
Da es alleine mit diesen Parametern schon beinahe unendlich viele Möglichkeiten gibt, kann keine Standard-LabVIEW-Routine bestehen, die dies einfach so mal für Dich automagisch erledigt.
Rolf Kalbermatter