' schrieb:Erstens:
"TD1 **TD1Hdl" - also ein Pointer auf eine Variable, die den Pointer auf den Struct enthält - das geht nicht mal mit DLL. Nicht, weil das mit dem Verfahren einer DLL nicht ginge, sondern weil LV als Datenflusssteuerung für diese Art des Variablenhandlings nicht ausgelegt ist (respektive hat meines Wissens noch niemand so ein Feature implementiert). Und was mit DLL nicht geht, geht garantiert auch nicht mit CIN.
Da hast Du mal Unrecht. Die Deklaration so wie Du sie hier siehst ist GENAU so wie LabVIEW ein Array im Speicher ablegt. Das ist dann auch die einzige Weise um Arrays an ein CIN zu übergeben.
Der DLL Knoten kann das aber auch. Einfach "Adapt to Type" auswählen und dann ein eindimensionales Array von float64 and den Eingang verbinden. Für diesen Fall noch "Handles als Value" und nicht "Pointer to Handles" ansonsten gibts ein "arg1 *TD1Hdl" Parameter was hier wohl nicht erwünscht wäre.
Rolf Kalbermatter
' schrieb:Zitat stammt von dem Link den Jens G gepostet hat. Danke dafür schonmal.
Ich versuche dieses VI nachzubilden aber ohne Erfolg. rolfk schrieb, dass es das auch für CIN's gibt. Wie heisst dieser Block? Vieleicht komme ich damit hin?!
Das hast Du aber aus einem anderen Thread kopiert und hier als Frage darauf in diesen Thread kopiert. Es gibt keinen Block den Du in einem CIN verwenden kannst. Wohl aber die MoveBlock Funktion die genau wie alle anderen LabVIEW Manager calls von LabVIEW.lib exportiert wird. Einfach extcode.h in Deinem C source File einfügen, LabVIEW.lib als extra Library in Dein Projekt aufnehmen und schon kannst Du diese Funktion in Deinem CIN oder DLL verwenden.
Und wie schon gesagt, CINs sind echt alte Legacytechnologie. Der Tag an dem die Erstellung von CINs in neuen LabVIEW Versionen nicht mehr möglich sein wird weil die entsprechenden CIN Tools einfach nicht mehr mitgeliefert werden ist wahrscheinlich nicht mehr so fern. Die Verwendung von bestehenden CINs wird wohl noch eine Weile möglich sein, aber auch das wird für neue Platformen(Windows 64bit zum Beispiel) für die LabVIEW eventuel noch herauskommen wird wohl nicht mehr unterstützt werden.
Du bist also gewarnt!
Rolf Kalbermatter
' schrieb:Welches VI willst du nachbilden? Das mit dem Move-Befehl? Das kannst du nicht nachbilden. Den Move-Befehl musst du herunterladen (siehe Link weiter oben in jenem Link), entsprechend beschalten und ausführen.
Im übrigen:
Der Move-Befehl ist dazu da, Unzulänglichkeiten einer Programmiersprache - ob LV, Delphi oder C++ - zu umgehen. Eigenlich soll man sowas gar nicht benutzen.
Das ist so nicht richtig. Wenn Du grössere Speicherbereiche kopieren willst kannst Du das entweder von Hand in einer Schleife tun, in C++ beispielsweise implizit durch den Compiler machen lassen wenn der dann beide Datentypen begreifen kann, oder eben eine Runtimefunktion verwenden. Die C Runtime bietet beispielsweise memcpy() und das Windows API bietet auch mindestens drei oder so Varianten dafür. LabVIEW hat dafür auch eine eigenen C Funktion um auf allen Plattformen dieselbe verwenden zu können. Solche Funktionen obwohl scheinbar trivial können es nämlich in sich haben. Beispielweise können nicht alle davon mit überlappenden Speicherbereichen umgehen.
Rolf Kalbermatter