| |
|
|
- page 1 - |
|
Uwe ''Pascal'' Niemeier | allô Roland!
qui faute, chez dem qui Adressen de Variablen par Proc-Aufrufe déménagé volonté, ist dans qui aktuellen Version 11.2ß toujours vorhanden
il hat sich bloß quelque chose pour hinten verschoben; veux dire: Tritt seulement ab einer gewissen Parameterzahl sur.
QED: KompilierenMarqueSéparationwindow 500,400
proc Demo-------------------------------------------------------------
parameters x1&,x2&,x3&,x4&,x5&,x6&--Ohne Parameters klappt es
endproc---------------------------------------------------------------
declare Wert&,Test&--bei Weglassen der 2. Deklaration klappt es
print Addr 1 ,addr(Wert&)
Demo(1,2,3,4,5,6)
print Addr 2 ,addr(Wert&)
wai
Zwar ließen sich peut-être Workarounds pour cela Problem finden; quand même pourrait/sollte es doch so pas son?
BTW: Offensichtlich sommes mon OCX-Routinen c'est pourquoi toujours pas funktionsfähig
Zur Erinnerung: Selbige ermöglichen u.A. qui Nutzung des champ d'application de commandement aller gängigen Scriptsprachen (JS, VBS, VBA, WSH) sous XProfan; tout autor liegt mir soviel daran. (et weil vous de mir sommes )
Hoffe sur (baldige) Aider Pascal |
|
|
| |
|
|
|
| |
|
- page 1 - |
|
RGH | Salut,
vergiß meinen Workaround. cela Problem tritt aussi chez Integers sur.
je fürchte, cela peut sich aussi à peine changement. Zur Speicherung qui Variablen benutze je qui dynamischen Arrays de Delphi. là gibt es pour jeden Variablentyp un Array. Wird eh bien une neue Variable deklariert wird qui Taille des Arrays um 1 ertweitert (Delphi: SetLength(IntVar, IntNr + 1)) et ensuite nom et Wert dans cela Array geschrieben. Wird cela Array eh bien größer, bleibt es alors pas aus, dass irgendwann qui Speicherbereich pour cela Array à une autre Stelle déménagé volonté muss, wohin plan cette zusätzliche place ist. comment cela Delphi ou bien Windows interne handhabt, sais je naturellement pas.
avant qui Dynamisierung trat cet Problem plan c'est pourquoi pas sur, là là qui grenier pour alle möglichen Variablen juste trop Programmbeginn reserviert wurde.
cela est dans qui aktuellen Praxis: une Variablenadresse ist mindestens so longtemps gültig, jusqu'à une weitere Variable cette Typs deklariert wird (par Déclarer, Var ou bien Paramètres).
je fürchte, à diesem Verhalten peux je vorerst aussi rien changement. (Es sei car, quelqu'un hat une allumage concept.)
Salut Roland
Nachtrag: peux Du pas Bereiche verwenden? qui Adresse eines Bereiches sollte sich pas Déplacer, là ici im entsprechenden Array oui seulement un aiguille sur den Bereich steht. Statt einer Lonint-Variablen alors un 4 Byte großer Bereich. |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.04.2009 ▲ |
|
|
|
|
RGH | cela klappt chez mir: KompilierenMarqueSéparationwindow 500,400
proc Demo-------------------------------------------------------------
parameters x1#, x2#, x3#,x4#, x5#, x6#
print x1#, x2#
endproc---------------------------------------------------------------
declare wert#, test#
dim wert#, 2
dim test#, 2
print Addr 1 ,addr(Wert#)
Demo(wert#,wert#,wert#,wert#,wert#,wert#)
print Addr 2 ,addr(Wert#)
put
|
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.04.2009 ▲ |
|
|
|
|
| @Pascal: je comprends toi déjà mais cela trifft arrêt seulement sur (echte) Variablen trop qui plan pas gemanaged sommes.
@RGH: aussi si Du cela la fois avant et derrière einer grösseren Anwendung einbaust dans qui einiges passiert?
j'ai aucun allumage concept. (quoique je Schonmal dachte une gehabt trop avons, la fois drüber grübeln...)
Ah, je weiss wieder comment... la fois zurechtschreiben - ist ne Präkompiler-Solution avec dem le tort cela pour den Zugriff qui Werte arrêt ne Sonderfunktion notwendig ist. (Umgekehrter le tort) |
|
|
| |
|
|
|
RGH | iF
@RGH: aussi si Du cela la fois avant et derrière einer grösseren Anwendung einbaust dans qui einiges passiert?
oui, qui Bereiche rester à ihrem place! (Bien sûr seulement jusque einem erneuten DIM. ;) ) Sonst würden vous oui pas du tout marcher. qui entsprechende Umbau sollte sich pour Pascal dans Grenzen tenir.
Salut Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.04.2009 ▲ |
|
|
|
|
| Nachtrag:
à meinem Beispiel, serait je statt pour reguläre Longs: KompilierenMarqueSéparationlong a,b,c
umgewandelt in
var a&=0
var b&=0
var c&=0
einfach
addr a,b,c
dispose a,b,c
umgewandelt in
var a&=globalAlloc(gPtr,4)
var b&=globalAlloc(gPtr,4)
var c&=globalAlloc(gPtr,4)
hier im programm mit dem wissen
dass sich hinter a& die Adresse
befindet, und nicht der Wert
long(a&,0).
dispose a&,b&,c&
end
verwenden.
Könnte XProfan chez Dispose avec einem GlobalFree réagir? |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi gens!
Roland
cela est dans qui aktuellen Praxis: une Variablenadresse ist mindestens so longtemps gültig, jusqu'à une weitere Variable cette Typs deklariert wird (par Déclarer, Var ou bien Paramètres).
Habe je aussi justement festgestellt. avec cela ist @Addr() trop einer vraie unsicheren l'affaire geworden
cela Übergeben eines Variablen-Pointers dient oui dans mon cas seulement en supplément, de einer Proc plus que den direkten Rückgabewert trop erfragen (Zusätzliche Rückgaben wurden plan per Pointer dans qui entsprechenden Variablen geschrieben). quand même: cet Possibilité sollte früher ou bien später wieder dans irgendeiner forme zur Disposition stehen.
Roland
qui entsprechende Umbau sollte sich pour Pascal dans Grenzen tenir.
Stimmt! Soweit je meinen eigenen Code durchschaue, diente cela Ganze seulement qui confort des Anwenders, weil qui so sa eigenen Variablen verwenden konnte (ansonsten ist qui concept de iF une Alternative, quoique a& = a# ensuite oui aussi marcher devrait).
Stattdessen sollte sich une System-Variable einbauen laisser, en le contenu pour Aufruf qui betreffenden Funktion plan umkopiert volonté doit... ou bien quelque chose comme dans qui Art.
Werde la fois voyons, quoi sich faire läßt...
SeeYou Pascal |
|
|
| |
|
|
|
Sebastian König | alors je trouve, Pascal hat droite. qui avec Addr() ermittelte Adresse sollte sich solange qui Variable gültig ist (chez globalen Variablen alors au cours de qui gesamten Laufzeit) pas changement dürfen. Dass cela dans qui acte trop Problemen mener peux (et obendrein trop gemeinen, so une faute trop lokalisieren ist oui alles autre comme simple...), montrer oui Pascals OCX-Codes.
si qui Ursache dans qui Verwendung qui dynamischen Arrays liegt, ist qui unschöne Konsequenz wohl, dass sich cet zur Speicherung qui Variablen schlicht pas eignen. mon Vorschlag ist donc, qui Verwaltung umzustellen, quoi naturellement wohl pas so kurzfristig possible ist... mais zumindest pour qui prochain Version peut-être déjà.
mon Vermutung wäre, dass qui Arrays interne une Art Vektor-super sommes (womöglich steht cela irgendwo dans qui Delphi-Documentation). Es devrait ensuite doch possible son, qui dynamische Gestion de la mémoire selbst trop implementieren et dabei sur qui de Delphi bereitgestellten Datenstruktur-Klassen zurückzugreifen. So ließe sich avec peut-être garnicht allzu viel travail cela Problem beheben.
MfG
Sebastian
P.S.: encore une concept: Zumindest pour globale Variablen pourrait on peut-être doch kurzfristig quelque chose einrichten, indem on vous beim Kompilieren zählt et festen grenier dans passender Taille bereitstellt. je sais naturellement pas, comment simple une solche Sonderbehandlung einzubauen wäre... |
|
|
| |
|
|
| |
|
- page 2 - |
|
|
RGH | allô Pascal et Sebastian,
kurzfristig, alors pour Version 11.2, allez probablement gar rien. Langfristig devrait je ensuite einiges ajuster, indem je etwa dans den Arrays pas qui Werte selbst, mais, comment chez den Bereichen, seulement Pointer sur den jeweiligen Speicherplatz unterbringe. c'est naturellement wieder un quelque chose umfangreicheres Unterfangen. Einen le tort voudrais je pas verschweigen: qui Zugriff sur Variablen wird dadurch naturellement un peu langsamer. je werde es mais pour Version 12 im Auge behalten.
Salut Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.04.2009 ▲ |
|
|
|
|
RGH | Hehe, et pour qui Schnelle gibt es doch une Solution:
Pour Integer, LongInt et Float lege je qui Arrays trop Programmbeginn sur la valeur fest, qui trop XProfan 10-Zeiten eh qui Höchstgrenze était: 2000. seulement si le 2001. Variable eines Typs declariert wird, wird cela Array dynamisch erweitert. là autrefois nie quelqu'un cet Grenzen erreicht hat, pourrait cela voerst aussi Dir, Pascal, ausreichen.
Salut Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.04.2009 ▲ |
|
|
|
|
Frank Abbing | cela hört sich doch très vernünftig à! |
|
|
| |
|
|
|
| @Roland: je weiss pas oui c'est ca comment Du zählst mais je suis unsicher cet frontière dans manchen Spielen pas trop erreichen et serait (si je pourrait) wohl aus Sicherheitsgründen qui numéro höher einstellen, aussi si es plus grenier dans Anspruch nimmt. Echte Variablen statt Arrays faire quelquefois aus Performancegründen Sinn aussi cela Verteilen sur viele kleine Funktionen avec wiederum lauter Variablen. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi gens!
je denke, on pourrait avec den instabilen Pointern leben; si on cela Problem erstmal kennt, sommes Workarounds (Bereiche verwenden) relativ simple. seulement dans dem de mir angesprochenen le cas (@Addr(Variable&) à PROC transfert, um direct dans qui Variable trop écrivons) sollte langfristig une elegantere Solution trouvé volonté, weil cet technologie z.B. chez Interfaces Standart ist.
quoi ocx betrifft: cela fonctionne maintenant Pour Austausch aller betroffenen Pointer par Bereiche et einer kleinen Correction bezüglich des PROC-Parameterstacks (chez dem es également une Unterschied entre 10.x et 11.x gibt) werde je dans Kürze une entsprechend angepaßte Version posten.
et merci à Roland, qui sich kurzfristig cette l'affaire angenommen hat, quoique es oui réellement seulement une kleinen partie qui Anwender betrifft (aussi si ca justement qui Grundlagenforscher sommes, et à wäre es doch tant pis gewesen )
SeeYou Pascal |
|
|
| |
|
|