Hi Maddin,
ich habe das, was du festgestellt hast, auch schon ähnlich erlebt. Ich sehe das Problem aber nicht in der Rückgabe, sondern schon in der Listbox selbst. Irgendwo gibt's da Kapazitätsgrenzen. Der folgende Code zeigt das:
(defun dcl-addlist(key lst / )
(start_list key 1)
(mapcar'add_list lst)
(end_list)
)
(defun test( / dclid)
(setq dclid(load_dialog"test"))
(new_dialog "test" dclid)
(dcl-addlist"filebox"(cr-l))
(start_dialog)
)
(defun cr-l( / l i)
(setq i 0)
(repeat 1000
(setq l(cons(strcat"item"(itoa i)"______________")l))
(setq i(1+ i))
)
;(princ(apply'+(mapcar'strlen l)))
(reverse l)
)
Hier sollten eigentlich die Posten 'item0___________' bis 'item999______________' in der Listbox erscheinen, aber es sind gerade mal etwa 100, die drinstehen. Wenn man noch ein paar Tiefstriche anfügt, werden es noch weniger.
Die auskommentierte Zeile ermittelt übrigens die Gesamtlänge der Zeichenkette, allerdings muss man die '\n' noch hinzurechnen. Eine Grenze konnte ich bisher allerdings nicht ermitteln. Selbst wenn ich die Tiefstriche ganz streiche und 'item' durch 'i' ersetze, werden gerade mal 423 Zeilen angezeigt. Wie du also überhaupt mehr als 400 Zeilen reingekriegt hast, ist mir schon ein Rätsel.
Die Rückgabe ist, wie du bemerkt hast, offensichtlich immer auf 255 begrenzt. Und was kann man da machen? Nix! Da haben irgendwelche Programmierer in ihrer unendlichen Weisheit einfach mal Sachen wie
<b>char listeninhalt[20000];</b> und <b>int auswahl[255];</b> in den Sourcecode geschrieben, und dabei ist es dann für immer geblieben.
Die DCL-Schnittstelle ist das ungepflegteste Stück Software, das mir überhaupt bekannt ist. Seit dem Erscheinen vor vielen, vielen Jahren hat sich AutoDesk nicht bemüht, da noch irgendetwas dran zu verbessern oder zu ändern. So alt, wie das Ganze ist, entstand der Code wahrscheinlich auf einem 386er Rechner mit 4 MB Arbeitsspeicher, aber selbst das ist keine Entschuldigung - da hätte AutoDESK fast ein Jahrzehnt Zeit gehabt, das mal auf Vordermann zu bringen.
Fazit: für kleine Listen ohne irgendwelche Features brauchbar, aber für solche Sachen, die du machen willst, ist Proteus einfach völlig ungeeignet. Aber auch in VB stösst man an solche Grenzen. Erinnere mich dumpf, dass ich da mal was machen wollte, aber VB sagte dann: 'Nö, mein lieber, mehr als 255 ... in einem Dialog geht nicht!' (ich glaube, es waren die Controls selbst).
Das Programmieren mit statischen Arrays, wo eigentlich eine verkettete Liste angebracht wäre, ist ja ein beliebtes Hobby;-) Da steigen dann Spiele aus, weil man mehr als 32768 Goldstücke angesammelt hat usw. Kennen wir doch alle...
Gruss, Axel
------------------
http://www.autolisp.mapcar.net
http://www.autolisp-tutorial.mapcar.net
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP