Español
Bugs y vermeintliche

Problema con Active-X Beispielen de Uwe Pascal N.

 
- Página 1 -



Dieter
Zornow
Yo denke es todavía una Problema en XProfan 11, habe gerade auch nochmals el OCX - Beispiele de Uwe Pascal N. getestet. Bajo XProfan 10 se ejecuta alles todavía einwandfrei. Bajo XProfan 11 RC 8 sólo Se bloquea cada Ejemplo.

Gruss

Dieter
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
29.06.2008  
 



 
- Página 1 -


Nutzt Delphi como Heaps  [...]  ?
 
30.06.2008  
 




RGH
... y ya que aussieht, laufen en mi Rechner a Casa (XP Pro SP3) el Beispiele de Uwe Pascal werder bajo XProfan 10 todavía bajo XProfan 11. Lo kommt siempre el Meldung CallMethod - Unbekannter Name. (Sí, Yo el ComCtl32.ocx registriert ....) In el Firma (XP Pro SP2 ha lo geklappt.)

Dann muß Yo mich wohl doch otro Temas zuwenden ...

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
30.06.2008  
 




Uwe
''Pascal''
Niemeier
¡Hola Personas!

Zunächst veces: Yo habe en el Moment weder XP SP3 todavía XProfan 11 disponible, por lo tanto kann ego no incluso testen.

Aber: El de Roland reklamierten Variables haben en dieser Versión el OCX-Routinen direkt nichts con el ActiveX-Características a tun:
KompilierenMarcaSeparación
proc ocxCreate----------------------------------ocxCreate-------------------------------

    parameters ProgID$,Wnd&,xa%,ya%,xb%,yb%,ObjAddr&,CtrlAddr&
    declare Control&,IUnknown&,Object&
    Control&=control(AtlAxWin,ProgID$,$50000000,xa%,ya%,xb%,yb%,Wnd&,0,0,0)
    ~AtlAxGetControl(Control&,addr(IUnknown&))
    Object&=QueryInterface(IUnknown&,~IID_IDispatch)
    CallMethod(IUnknown&,~Release)
    long ObjAddr&,0=Object&
    long CtrlAddr&,0=Control&
    endproc---------------------------------------------------------------------------------
    declare Object&,Control&
    ocxCreate(MSCAL.Calendar.7,%hwnd,10,100,350,250,addr(Object&),addr(Control&)

El beiden Pointer kommen en el Proc como ObjAddr& y CtrlAddr& a, Object& y Control& voluntad lokal otra vez deklariert y al Ende el Proc voluntad el - como Parámetro übergebenen - Pointer con LONG gefüllt.

Das Problema podría also auch en el direkten Übergabe de
addr(Variable&) como Parámetro para una Procedimiento mentira oder en el lokalen Deklaration uno global ya vorhandenen Variable...

PS: Im Ejemplo se Versión 1 el OCX-Routinen verwendet. Como sieht lo porque con Versión 2 de?

SeeYou
Pascal
 
01.07.2008  
 



 
- Página 2 -



RGH
¡Hola,

Yo me el Sache gestern Abend una vez más genauer angeschaut. Es auch weiterhin así, dass una variable während ihrer Gültigkeit Ihre Adresse no ändert. Von por lo tanto also una Entwarnung!

Das Problema liegt en Pascals Crear-Rutina, o. el Übergabe el Variables de dieser zurück:
KompilierenMarcaSeparación
Proc ocxCreate----------------------------------ocxCreate-------------------------------

    parameters ProgID$,Wnd&,xa%,ya%,xb%,yb%,ObjAddr&,CtrlAddr&
    declare Control&,IUnknown&,Object&
    Control&=control(AtlAxWin,ProgID$,$50000000,xa%,ya%,xb%,yb%,Wnd&,0,0,0)
    ~AtlAxGetControl(Control&,addr(IUnknown&))
    Object&=QueryInterface(IUnknown&,~IID_IDispatch)
    CallMethod(IUnknown&,~Release)
    long ObjAddr&,0=Object&
    long CtrlAddr&,0=Control&
    endproc--------------------------------------------------------------------------------span>

Über PARAMETERS voluntad el beiden Adressen en el lokalen Variables ObjAddr& y CtrlAddr& gespeichert. Deren Adressen voluntad aber con Verlassen el Procedimiento ungültig. In XProfan 11 haben Object& y Control& valor 0 ... qué entonces unweigerlich para Crash führt.
Möchte uno mehrere Werte de uno Procedimiento zurückerhalten wempfiehlt se siempre el Weg una struktur oder encima una Objeto, como - como en nahezu allen Idiomas - Estructuras y Objetos por Adresse transferencia voluntad. So sieht el angepaßte Crear-Procedimiento de:
KompilierenMarcaSeparación
proc ocxCreate----------------------------------ocxCreate-------------------------------

    parámetros ProgID$,Wnd&,xa%,ya%,xb%,yb%,Uebergabe#
    declarar IUnknown&
    Uebergabe#.Control&=control(AtlAxWin,ProgID$,$50000000,xa%,ya%,xb%,yb%,Wnd&,0,0,0)
    ~AtlAxGetControl(Uebergabe#.Control&,Addr(IUnknown&))
    Uebergabe#.Object&=QueryInterface(IUnknown&,~IID_IDispatch)
    CallMethod(IUnknown&,~Release)
    ENDPROC---------------------------------------------------------------------------------

Auch el Procedimiento QueryInterface() muß entsprechend angepaßt voluntad (Aufruf de CallMethod()):
KompilierenMarcaSeparación
proc QueryInterface-------------------------------------------------------------

    parámetros IFace1&,IID$
    declarar IFace2#,Error&
    dim IFace2#,4
    StringToGUID(IID$,IID#)
    Error&=CallMethod(IFace1&,0,IID#,IFace2#)
    caso Error&<0:ErrorMessage(Error&,QueryInterface)
    CallMethod(IFace1&,~Release)
    volver long(IFace2#, 0)
    ENDPROC-----------------------------------------------------------------------

Und así nun el Beispielprogramm:
KompilierenMarcaSeparación
window 100,10-500,500
usermessages 16
 $H Windows.ph
 $H OCX.ph
 $I OCX.inc
Nur a Demo. Normalerweise sería uno el Übergabestruktur en OCX.ph definieren
Struct SUebergabe = Object&, Control&
declarar U#
dim U#, SUebergabe
declarar ATL&,Var#,Disp#,IID#
ocxInit()
ocxCreate(MSCAL.Calendar.7,%hwnd,10,100,350,250,U#)
ocxMethod(U#.Object&,Today)
numwidth 3

mientras que 1

    locate 0,0
    imprimir Tag   ,ocxGet(U#.Object&,Day)
    imprimir Monat ,ocxGet(U#.Object&,Month)
    imprimir Jahr  ,ocxGet(U#.Object&,Year)
    waitinput
    caso %umessage=16:romper

endwhile

ocxMethod(U#.Object&,AboutBox)
destroywindow(U#.Control&)
ocxDeInit()

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
01.07.2008  
 




RGH
Noch kurz a Erklärung para Insider:

In Xrofan 11 voluntad tatsächlich con Verlassen uno Procedimiento el Adressen el lokalen Variables otra vez ungültig y entsprechende Speicher se otra vez frei gegeben.

Bis einschließlich XProfan 10 wurde el Speicher para todos möglichen Variables sí beim Start disponible gestellt.* Beim Verlassen el Procedimiento wurde zwar el Zeiger en el letzte Variable zurückgesetzt, así dass en el lokalen Variables el Procedimiento no mehr zugegriffen voluntad podría y Speicher para el Deklaration neuer Variables otra vez disponible stand, pero la Speicher wurde no freigegeben. Und así largo dieser no por neue Declares genutzt wurde, blieben el alten Werte hay posición.

Saludo
Roland

* En Cuerdas, Arrays y Bereichen allerdings sólo el Zeiger en el Speicher ... aber el wäre ahora una más Thema ...
 
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
01.07.2008  
 




Sebastian
König
RGH
Über PARAMETERS voluntad el beiden Adressen en el lokalen Variables ObjAddr& y CtrlAddr& gespeichert. Deren Adressen voluntad aber con Verlassen el Procedimiento ungültig. In XProfan 11 haben Object& y Control& valor 0 ... qué entonces unweigerlich para Crash führt.


Das Argument verstehe Yo irgendwie no... en el Parametern ObjAddr& y CtrlAddr& voluntad doch el Adressen de globalen Variables transferencia (siehe Pascals Code oben). Was genau es entonces el problema en uno Zuweisung el Form long ObjAddr&,0=Object&? Worauf genau ObjAddr& nun zeigt, macht de Sicht el Procedimiento sí no hay diferencia y dass Object& nun una lokale Variable es, dürfte auch ningún papel spielen.

So Yo el Descripción verstehe, es el todo doch äquivalent a una solchen Ejemplo:
KompilierenMarcaSeparación
proc Test

    parameters pA&,pB&
    long pA&,0 = 123
    long pB&,0 = 456

endproc

cls
declare a&,b&
Test Addr(a&),Addr(b&)
print a&,b&
waitkey
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
01.07.2008  
 




RGH
Sí, rOlf, Yo vermute Usted hast bastante: Mi Erklärung war algo a kurz gegriffen.
Tatsache es, dass el entsprechend veränderten y de me geposteten Quellcodes auch bajo XProfan 11 einwandfrei trabajo.
(Zumindest hier al Arbeitsplatz-PC. Zuhause en mi Rechner klappt gar nichts con ActiveX - weder en XProfan 10 todavía 11. Yo muß veces überprüfen, si mi ComCtl32.ocx el richtige es.)

Möglicherweise hängt el problema auch así zusammen, dass lokale Variables a ActiveX-Características gegeben voluntad, el auch después de el Verlassen el Procedimiento todavía aktiv son y así plötzlich en no mehr gültige Adressen zugreifen. Yo voluntad en Gelegenheit weiterforschen. Wichtig es hier, dass wir una solución a el problema haben y Uwe Pascals Quellcodes auch para XProfan11-Nutzer offen posición.

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
01.07.2008  
 




Frank
Abbing
Si el Problema sólo lokale Variables betrifft y no el Globalen, kann Yo así durchaus leben. Dass lokale Variables en erneutem Aufruf uno Prozedure gelöscht voluntad, es sí durchaus gängige Praxis. So bin Yo auch de Ensamblador de gewohnt.
 
01.07.2008  
 




Uwe
''Pascal''
Niemeier
¡Hola Personas!


Möglicherweise hängt el problema auch así zusammen, dass lokale Variables a ActiveX-Características gegeben voluntad, el auch después de el Verlassen el Procedimiento todavía aktiv son y así plötzlich en no mehr gültige Adressen zugreifen.


Das podría aber sólo en IUnknown& zutreffen, qué aber anscheinend no Fall es.
El Werte para/de Control& y Object& (lokal) voluntad direkt zugewiesen ; lo voluntad no Pointer verwendet.
Folglich kann auch kein späterer Zugriff darauf tener lugar.
Wegen QueryInterface() muß Yo veces schauen...


Wichtig es hier, dass wir una solución a el problema haben y Uwe Pascals Quellcodes auch para XProfan11-Nutzer offen posición.


Mir ging lo en efecto por lo tanto, el Routinen möglichst weit abwärtskompatibel a halten, por lo tanto Yo en OOP verzichtet.
Pero ya para OCX-Package Versión 3 vorgemerkt.
Wäre aber trotzdem bien, dieses Problema a dahin geklärt a haben. El Übergabe de Pointern, en Variables a füllen debería sí - trotz OOP - durchaus no ungewöhnlich ser.

PS: El Schwierigkeiten con SP3 voluntad Yo demnächst vornehmen.

SeeYou
Pascal
 
02.07.2008  
 




RGH
¡Hola Pascal,

el Übergabe de Pointern, en Variables a füllen, es - como Rolf en efecto ya festgestellt ha - no el eigentliche Problema.
Das Problema vermute Yo eben en el Zona, wo Adressen lokaler Variables a Características transferencia voluntad, el auch después de Beendigung el aufrufenden Procedimiento (y el Ungültigwerden eben dieser Adressen) todavía weiterlaufen. Hierzu zählen offensichtlich ActiveX-Objetos. Auf Anhieb kann Yo en Deinem Code zwar no derartigen Aufrufe con Adressen lokaler Variables erkennen, aber ActiveX ha como möglicherweise Eigenheiten, el me todavía no geläufig son.
Desde que en la actualidad en mi Entwicklungsrechner el Beispiele no a veces XProfan 10 para Laufen bekomme, muß Yo una weitere Analyse en el Tiempo después de el Release de XProfan 11 mover. (Como voluntad Yo mi Rechner una neues Motherboard con besserem Prozessor gönnen. Vor el Release gilt bastante streng: Never Change A Running Sistema.) Und debería Yo wirklich entonces determinar, dass Yo en XProfan qué tun kann, spricht sí nichts gegen una kostenloses Actualización sobre una XProfan 11.0a oder gar 11.1.

Wenn lo no wirklichen ShowStopper mehr son, se XProfan 11 demnächst festgeklopft y endlich a JDS geliefert. Yo bin eh ya (teils por berufliche y private Auslastung, teils por Maßlosigkeit beim Einbau neuer Features) etwa 2 Monate hinter mi ursprünglichen Zeitplan.

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
02.07.2008  
 




RGH
¡Hola Pascal,
Yo no dejar puede y mi Frühstückspause al Arbeitsplatzrechner geopfert:

Der oben gepostete Code scheint no 100%ig stabil a ser. Wenn Yo el Declarar en el Procedimiento CallMethod en más que drei Variables erweitere, bricht el Programa con uno Fehlermerldung de. Sehr befremdlich, el! Also Yo algo más experimerntiert.

Lo xcheint tatsächlich con el QueryInterface zusammenzuhängen. Yo habe veces geschaut, Yo en XProfan beim HTML-Ventana anders mache: Desde que sí sólo el Control zurückgebe, mache Yo jedesmal una neues QueryInterface, a Objektadresse a ermitteln (y natürlich después de Gebrauch des Objektes una Releasen). Das Yo veces en Deinem OCX.INC umgesetzt. Zunächst una ocxCreateC() (el C es para Control):
KompilierenMarcaSeparación
proc ocxCreateC ----------------------------------ocxCreate-------------------------------

    parameters ProgID$,Wnd&,xa%,ya%,xb%,yb%
    return control(AtlAxWin,ProgID$,$50000000,xa%,ya%,xb%,yb%,Wnd&,0,0,0)
    endproc ---------------------------------------------------------------------------------

Dann el Proceduren ocxGet, ocxPut y ocxMethod como ocGetC, ocxPutC y ocxMethodC kopiert y entsprechend erweitert. Als Ejemplo hier ocxGetC():
KompilierenMarcaSeparación
proc ocxGetC-------------------------------------ocxGet----------------------------------

    parámetros Control&,Name$
    declarar Object&,IUnknown&
    declarar DispID&,v&,v$
    ~AtlAxGetControl(Control&,addr(IUnknown&))
    Object&=QueryInterface(IUnknown&,~IID_IDispatch)
    clear Var#,Disp#,IID#
    Name$=MultiToWideEx(Name$)
    v&=addr(Name$)--GetIDsOfNames braucht Pointer en Pointer
    CallMethod(Object&,5,IID#,addr(v&),1,0,addr(DispID&))--GetIDsOfNames
    CallMethod(Object&,6,DispID&,IID#,0,~DISPATCH_PROPERTYGET,Disp#,Var#,0,0)--Invoke

    if Var#.vt%=~VT_BSTR------OLE-String

        v$=WideToMultiEx(Var#.Val&)
        más----------------------numerischer Valor
        v$=str$(Var#.Val&)

    endif

    ~VariantClear(Var#)
    CallMethod(IUnknown&,~Release)
    volver v$
    ENDPROC---------------------------------------------------------------------------------

ocxQueryInterface Yo así gelassen, como oben Nuevo (con IFace2#). Und ya klappt alles (zumindest hier al Arbeitsplatz ;) )

Nur ne vage Theorie, oder mejor Hypothese: Vermutlich kann se el ActiveX-Objeto en el Speicher mover, qué pero en el statischen Speicherverwaltung en XProfan 10 en el Beispielprogrammen no vorkam, como como sí nirgendwo neuer Speicher angefordert wurde. Jetzt ermittle Yo encima QueryInterface el Objektadresse (Object&) jedesmal neu y el problema scheint Fijo.

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
02.07.2008  
 




Uwe
''Pascal''
Niemeier
Hola Roland!


Nur ne vage Theorie, oder mejor Hypothese: Vermutlich kann se el ActiveX-Objeto en el Speicher mover, qué pero en el statischen Speicherverwaltung en XProfan 10 en el Beispielprogrammen no vorkam, como como sí nirgendwo neuer Speicher angefordert wurde.


Klingt gewagt...
En Desarrollo el OCX-Routinen Yo no Hinweise en así una Comportamiento gefunden.
Aunque se en Programmiersprachen con ActiveX-Unterstützung sí así bastante alles como selbstverständlich vorausgesetzt (lo que el Umsetzung después de Sí lo profano; así schwer macht).
Möglicherweise voluntad como el Pointer automáticamente nachgeführt más o menos.

Werde mich otra vez dahinterklemmen, si a el Tiempo es.


Wenn lo no wirklichen ShowStopper mehr son, se XProfan 11 demnächst festgeklopft y endlich a JDS geliefert.


Sombrero en cada Fall Priorität! Falls el a Oktober klappt, hol ego me persönlich en JDS de (Im Herbst zelten a el See es qué feines )

Und una Workaround haben wir sí nun auch

Gracias para el Mühe!

SeeYou
Pascal
 
05.07.2008  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

9.159 Views

Untitledvor 0 min.
RudiB.17.03.2022
Andre Rohland30.12.2013
Pedro Miguel26.08.2013
Georg Hovenbitzer28.05.2013
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie