Hmm ja, ein Beispiel ist gut - nur etwas passendes, was man einfach so jemanden in die Hand drücken kann, das habe ich auch nicht. Und dein Cluster mit dem Array als Clusterelement ist auch nicht gerade so das, was sich als Beispiel gut eignen würde.
Erst einmal gibt es im LabVIEW im Menü unter "Help, Search the LabVIEW Bookshelf..." irgendwo eine PDF Datei "Using External Code in LabVIEW". Dort findest du in Kapitel 4 eine Beschreibung, wie die größe von Arrays verändert werden kann.
Vom Ansatz her geht es etwa folgendermaßen, wenn du ein neues Element zum Array hinzufügen willst:
1. du erstellst erst einmal ein neues Element (der Cluster) mit DSNewHandle()
2. Du erstellst ein neues Handle für das Array "Chromosom" am besten gleich in der passenden Arraygröße
3. Jetzt kannst du den Wert für "fitness" eintragen und auch die korrekten Werte im "Chromosom" Array eintragen.
4. mit NumericArrayResize passt du dein "population" Array auf die neue gewünschte Größe an.
5. Nun kannst du den in den Schritten 1 bis 3 erstellten Handle des Clusters in das Array eintragen.
Nunja, ich gebe zu: Bei deinem Array ist das ist schon ein besonderes Vergnügen. Du darfst nur nicht aufgeben.
Ich nehme jetzt doch einmal ein Beispiel und reduziere das aber auf das Wesentliche. Die Behandlung der Fehlersituationen würde sonst den Blick auf das Wesentliche verdecken. Der ursprüngliche Code ist Teil der OpenG Serial Port API - die gibt es noch nicht. Die kompletten Sourcen gibt es derzeit nur bei mir auf direkte Anfrage. Die fertige Serial Port API (aber nicht die OpenG Version) bei mir auf der Webseite (
http://www.mhst.de/downloads.html).
Sinn und Zweck der Funktion ist es die Namen aller seriellen Schnittstellen des PC in einem Array zu liefern. Weil ich keine Lust hatte an der Stelle die größe des Strings (eines Portnamens) selbst anzupassen, habe ich das der Funktion LStrPrintf() überlassen - die macht das ganz alleine. Das ist nicht gerade schnell, aber an der Stelle ausreichend. In pszPort ist bereits der Name des Ports als C-String (Null-terminiert) enthalten. Dir wird auch auffallen, dass der Funktion nicht der Pointer auf das Array-Handle übergeben wird, sondern nur das Array-Handle selbst. Das macht die Sache etwas leichter (das solltest du auch so machen). Hier nun der stark vereinfachte Ausschnitt um den String an das Array zu hängen:
[code]//create new handle for the next port name
if ( (shPort = (LStrHandle)DSNewHandle(sizeof(LStr))) == NULL)
{