| |
|
|
Uwe ''Pascal'' Niemeier | Hola Roland!
Der Fehler, en el el Adressen de Variables por Proc-Aufrufe movido voluntad, es en el aktuellen Versión 11.2ß siempre todavía disponible
Er ha se bloß algo después de hinten verschoben; voluntad sagen: Tritt sólo de uno gewissen Parameterzahl en.
QED: KompilierenMarcaSeparaciónwindow 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 se tal vez Workarounds para el problema finden; trotzdem dürfte/debería lo doch así no ser?
BTW: Offensichtlich son mi OCX-Routinen deshalb siempre todavía no funktionsfähig
A Erinnerung: Selbige ermöglichen u.A. el Nutzung des Befehlsumfanges aller gängigen Scriptsprachen (JS, VBS, VBA, WSH) bajo XProfan; por lo tanto liegt me soviel daran. (Und porque ellos de me son )
Hoffe en (baldige) Ayuda Pascal |
|
|
| |
|
|
|
| Tuve lo así verstanden, dass porque lo kein Bug es nichts daran geändert se.
Auch wegen el Desktopsymbole en Roland [...] Yo una Brett antes Augen, si daran liegt. |
|
|
| |
|
|
|
RGH | ¡Hola,
una bastante einfacher Workaround scheint a ser, en lugar de LongInt (&) en Integer (%) umzusteigen. Como beide en el 32-Bit-Programa igual groß son, macht el no hay diferencia. Wenn Yo el bastante sehe, tritt el problema sólo en LongInts en. Yo schaue aber natürlich, si Yo el gefixt bekomme, auch si para el normale Verwendung de Variables ningún papel juega.
Saludo 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 ▲ |
|
|
|
|
Uwe ''Pascal'' Niemeier | Hi IF!
Tuve lo así verstanden, dass porque lo kein Bug es nichts daran geändert se.
Wenn el Adresse uno globalen Variables se por una Procedimiento-Aufruf (a el el Variable no veces incluso beteiligt es) ändert y dies bajo no näher bekannten Bedingungen (abhängig de vorherigen Deklarationen, Parameterzahl el Proc, Art el Auswertung el Parámetro usw) , entonces el IMHO definitiv una Bug.
Denn: Was nützt @Addr(), si la Rückgabe unos pocos Programmzeilen más ungültig es, porque zwischendurch una Procedimiento aufgerufen wurde?
Außerdem es esta Art el Verwendung de Pointern sowohl en Windows incluso como auch en otro Programmiersprachen Gang y Gäbe..
Hoffen wir also el Beste...
PS: Mir brennt en Sachen HTML auch el Tiempo bajo el Nägeln; si Yo tatsächlich irgendeinen Workaround remendar muß, lasse Yo dich wissen!
SeeYou Pascal
Apéndice @Roland: War otra vez veces a langsam beim Carta! Gracias para el Tipp! Wird inmediatamente getestet! |
|
|
| |
|
|
|
| Ein Workaround es Reboos ProAx, geladen con un z.B. 8x1 Pixel Flashfilm en una DC el abgepixelt se wobei el Flashfilm sólo 8 Bit Mostrar kann como Kommunikationskanal. Der Flashfilm wiederum kann js auslösen y wiederum con el body kommunizieren.
Bitte no lachen, el funktioniert y yo podría en el bedarf herauskrahmen.
Dennoch empfand Yo esta Solución como unentsprechend... (y langsam...) |
|
|
| |
|
|
|
RGH | ¡Hola,
vergiß media Workaround. Das Problema tritt auch en Integers en.
Yo fürchte, el lässt se auch kaum ändern. A Speicherung el Variables benutze Yo el dynamischen Arrays de Delphi. Puesto que hay lo para cada Variablentyp una Array. Wird nun una neue Variable deklariert se el Größe des Arrays en 1 ertweitert (Delphi: SetLength(IntVar, IntNr + 1)) y luego Name y Valor en el Array geschrieben. Wird el Array nun größer, restos lo also no de, dass irgendwann el Speicherbereich para el Array a una otro Punto movido voluntad muss, wo eben dieser zusätzliche Platz es. Como el Delphi oder Windows intern handhabt, weiß Yo natürlich no.
Vor el Dynamisierung trat dieses Problema eben deshalb no en, como hay el Speicher para todos möglichen Variables igual a Programmbeginn reserviert wurde.
Das heißt en el aktuellen Praxis: Un Variablenadresse es mindestens así largo gültig, a una weitere Variable esta Typs deklariert se (por Declarar, Var oder Parámetros).
Yo fürchte, a diesem Comportamiento kann Yo vorerst auch nichts ändern. (Lo sei porque, alguien ha un despertar Concepto.)
Saludo Roland
Apéndice: Si no puede Bereiche uso? El Adresse uno Bereiches debería se no mover, como hier en el entsprechenden Array sí sólo una Zeiger en el Zona es. Statt uno Lonint-Variables Así que una 4 Byte großer Zona. |
|
|
| 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 | Das klappt en me: KompilierenMarcaSeparaciónwindow 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: Yo verstehe Usted ya aber el trifft sólo sólo en (echte) Variables a el eben no gemanaged son.
@RGH: Auch si el veces antes de y hinter uno grösseren Anwendung einbaust en el einiges passiert?
Yo habe no idea brillante. (obwohl Yo schonmal pensamiento una gehabt a haben, veces drüber grübeln...)
Ah, Sé que otra vez como... veces zurechtschreiben - es ne Präkompiler-Solución con el Nachteil el para el Zugriff el Werte sólo ne Sonderfunktion notwendig es. (Umgekehrter Nachteil) |
|
|
| |
|
|
|
RGH | IF
@RGH: Auch si el veces antes de y hinter uno grösseren Anwendung einbaust en el einiges passiert?
Sí, el Bereiche bleiben a ihrem Platz! (Natürlich sólo a a una erneuten DIM. ;) ) Sonst würden ellos sí überhaupt no trabajo. Der entsprechende Umbau debería se para Pascal en Grenzen halten.
Saludo 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 ▲ |
|
|
|
|
| Apéndice:
An mi Ejemplo, sería Yo en lugar de para reguläre Longs: KompilierenMarcaSeparaciónlong 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
uso.
Könnte XProfan en Disponer con un GlobalFree reagieren? |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi Personas!
Roland
Das heißt en el aktuellen Praxis: Un Variablenadresse es mindestens así largo gültig, a una weitere Variable esta Typs deklariert se (por Declarar, Var oder Parámetros).
Posesiones Yo auch gerade festgestellt. Damit es @Addr() a uno echt unsicheren Sache geworden
Das Übergeben uno Variables-Pointers dient sí en mi caso sólo dazu, de uno Proc más que el direkten Rückgabewert a erfragen (Zusätzliche Rückgaben fueron eben por Pointer en el entsprechenden Variables geschrieben). Trotzdem: Diese Möglichkeit debería früher oder später otra vez en irgendeiner Form disponible posición.
Roland
Der entsprechende Umbau debería se para Pascal en Grenzen halten.
Stimmt! Soweit Yo media eigenen Code durchschaue, diente el Ganze sólo el Bequemlichkeit des Anwenders, porque el así seine eigenen Variables uso podría (ansonsten Es el Concepto de IF una Alternative, obwohl a& = a# entonces en efecto klappen müßte).
Stattdessen debería se una Sistema-Variable einbauen dejar, deren Inhalt después de Aufruf el betreffenden Función eben umkopiert voluntad muß... oder algo como en el Art.
Werde veces sehen, qué se hacer läßt...
SeeYou Pascal |
|
|
| |
|
|
|
Sebastian König | Also Yo finde, Pascal ha bastante. El con Addr() ermittelte Adresse debería se solange el Variable gültig es (en globalen Variables also während el gesamten Laufzeit) no ändern dürfen. Dass el en el Tat a Problemen führen kann (y obendrein a muy gemeinen, así una Fehler a lokalisieren es sí alles otro como simplemente...), zeigen sí Pascals OCX-Codes.
Wenn el Ursache en el Verwendung el dynamischen Arrays liegt, Es el unschöne Konsequenz wohl, dass se esta a Speicherung el Variables schlicht no eignen. Mein Vorschlag es demnach, el Verwaltung umzustellen, qué natürlich probablemente no así kurzfristig posible es... Aber zumindest para el nächste Versión tal vez ya.
Mi Vermutung wäre, dass el Arrays intern una Art Vektor-Klasse son (womöglich es el irgendwo en el Delphi-Documentación). Lo debería entonces doch posible ser, el dynamische Speicherverwaltung incluso a implementieren y esta en el de Delphi bereitgestellten Datenstruktur-Klassen zurückzugreifen. So ließe se con tal vez garnicht allzu viel Arbeit el problema beheben.
MfG
Sebastian
P.S.: Noch una Concepto: Zumindest para globale Variables podría uno tal vez doch kurzfristig algo einrichten, indem uno ellos beim Kompilieren zählt y festen Speicher en passender Größe bereitstellt. Yo weiß natürlich no, como simplemente una solche Sonderbehandlung einzubauen wäre... |
|
|
| Windows XP, XProfan/Profan² 4.5 bis 11 Profan2Cpp-Homepage: [...] Alte Profan²-Seite: [...] | 04.04.2009 ▲ |
|
|
|