INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

DLL: String übergeben und wieder ausgeben..woran scheiterts?



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!

06.10.2009, 10:16 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2009 10:22 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL: String übergeben und wieder ausgeben..woran scheiterts?
1) LabVIEW ist nicht inherent langsam. Strings immer wieder aneineanderfügen schon. Das hat mit der Art des Memorymanagements zu tun. Ich bezweifle dass Du mit externem C Code sehr viel verbessern kannst, da Du bei vielen Stringconcatenations halt nun einmal oft den Speicher reallozieren musst, oder Du musst von Beginn an mit einem Riesenblock arbeiten in den Du dann die Information nach und nach hineinfüllst. Die grösste Zeit geht nämlich im DSSetHandleSize() oder Anverwandten wie NumericArrayResize() verloren und solange Du das nicht prinzipiel eliminierst wirst Du auch mit C Programmierung keinerlei Zeitgewinn machen.

Grundsätzlich lässt sich aber das Allozieren eines grossen Blockes ganz zu Beginn und dann das Einfüllen der entsprechenden SubDaten in diese, auch ganz in LabVIEW machen. Shift Register in einer Loop und Arrayoperationen sind das Schlüsselwort hinzu. Ist zwar nicht mehr so einfaches LabVIEW Programmieren aber in C machst Du ja auch nichts anderes und schnelleres Programmieren davon in C geht meist auch nicht, ausser Du bist ein richtiger C Crack der fehlerfreien C Source Code noch im Schlaf träumt.

2) Du lässt nicht sehen wie Du diese Funktion in LabVIEW aufrufst. Der void *LVHandle Parameter is auch unschön. Dies sollte LStrHandle LVHandle sein oder LStrHandle *LVHandle, je nachdem ob Du den Parameter als LabVIEW Stringhandle "passed as Handle" oder "passed as Pointer to Handle" konfiguriert hast. Wenn Du es als Pointer zu einem Handle konfigurierst, musst Du aber damit Rechnung tragen, dass LabVIEW Dir einen NULL Pointer reinschickt, wenn es ein leeres Handle betrifft. NumericArrayResize() kann damit umgheen. DSSetHandleSize() aber nicht da Du kein nicht existentes Handle resizen kannst. Dann musst Du explicit auf ein NULL Handle testen und in dem Fall DSNewHandle() benützen.

Dein Beispiel sollte besser so ausschauen, auch wenn dies nicht sinnvoll ist:

[code]#include "extcode.h"

__declspec (dllexport) MgErr summieren(LStrHandle *LVHandle, char *ixx)
{

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
DLL: String übergeben und wieder ausgeben..woran scheiterts? - rolfk - 06.10.2009 10:16

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  String an DLL übergeben Klausenwirt 22 18.877 31.01.2014 14:40
Letzter Beitrag: Klausenwirt

Gehe zu: