Español
C ++ Foro

Volver Valor stimmt no

 

Georg
Hovenbitzer
¡Hola Sebastian,

Yo veces otra vez una größeres Problema.
Der geniale folgende Code stammt vom Pascal, soetwas podría Yo no ausdenken.
Er ermittelt el Quellcode de una geöffneten IE Ventana, como z.B. www.google.de.
Zum Test Por favor, no große Página nehmen, como el Zuweisung para Editar Feld en el Beispielt todavía por SetText va.

Im Interpreter y como Profano Exe se ejecuta él super, übersezt kommt siempre una Schutzverletzung.
El Línea el el Fehler verursacht Es el:
Error& = CallMethod(IHTMLElement&,62,@Addr(Text&))

Der Grund es dafür, dass el Aufruf davor de:
Error& = CallMethod(IHTMLDocument2&,9,@Addr(IHTMLElement&))

Un Error& Nummer <> 0 zurückt son y IHTMLElement&, igual 0 es.

Könnte dieses Problema des Übersetzen ser ?
KompilierenMarcaSeparación
 $H D:PrivatProfanXProfan9INCLUDEWindows.ph
---------------Umwandlung String > globally unique identifier

Proc StringToGUID

    Parameters GUID$,GUID&
    Declare Temp$
    Temp$ = @Space$(80)
    ~MultiByteToWideChar(1,1,@Addr(GUID$),-1,@Addr(Temp$),80)
    @External("ole32","CLSIDFromString",@Addr(Temp$),GUID&)

EndProc

-----------------------------------------------------------------------
--------------------------Methode eines COM-Interfaces aufrufen

Proc CallMethod

    Parameters IFace&,Method&
    Declare VTable&
    VTable& = @Long(IFace&,0)
    Method& = @Long(VTable&,(Method& * 4))
    Case %PCount = 2 : Return @Call(Method&,IFace&)
    Case %PCount = 3 : Return @Call(Method&,IFace&,@&(3))
    Case %PCount = 4 : Return @Call(Method&,IFace&,@&(3),@$(4))
    Case %PCount = 5 : Return @Call(Method&,IFace&,@&(3),@&(4),@&(5))

EndProc

-----------------------------------------------------------------------
----------WideChar (UniCode) zu MultiByte (Ansi) [nur OLE!]

Proc OLE_WideToMulti

    Parameters Text&
    Declare Text$,Size&,Text#
    Size& = @External("oleaut32","SysStringLen",Text&)
    Dim Text#,Size&
    Clear Text#
    ~WideCharToMultiByte(0,0,Text&,-1,Text#,Size&,0,0)
    @External("oleaut32","SysFreeString",Text&)
    Text$ = @String$(Text#,0)
    Dispose Text#
    Return Text$

EndProc

-----------------------------------------------------------------------
------------------------------EnumChildProc---------------------------

Proc EnumChildProc

    Parameters wnd&
    Declare Name#
    Dim Name#,255
    ~GetClassName(wnd&,Name#,255)
    Case @String$(Name#,0)="Internet Explorer_Server" : IEServerWnd& = wnd&
    Dispose Name#
    Return 1

EndProc

---------------------------------------------------------------------------------
--------------------------RunningIE_GetText-----------------------

Proc RunningIE_GetText

    Parameters IEHwnd&
    Declare Error&,IID#,Msg&,Result&,oleacc&,IHTMLDocument2&,IHTMLElement&,Text&,Text$,Url&,Url$
    Dim IID#,16
    Declare IEServerWnd&
    ~EnumChildWindows(IEHwnd&,@ProcAddr(EnumChildProc,2),0)
    @ProcAddr(EnumChildProc,-2)--ProcAddr freigeben
    Print "IEServerwnd&",IEServerWnd&
    Print
    Msg& = ~RegisterWindowMessage("WM_HTML_GETOBJECT")
    Print "msg",Msg&
    Print
    Error& = ~SendMessageTimeout(IEServerWnd&,Msg&,0,0,~SMTO_ABORTIFHUNG,1000,@Addr(Result&))
    Print "Error SendMessageTimeout",Error&
    Print "Result SendMessageTimeout",Result&
    @External("ole32","CoInitialize",0)
    oleacc& = @UseDLL("oleacc.dll")
    Print "oleacc",oleacc&
    Print
    StringToGUID("{332c4425-26cb-11d0-b483-00c04fd90119}",IID#)--IID_IHTMLDocument2
    Error& = @External("oleacc","ObjectFromLresult",Result&,IID#,0,@Addr(IHTMLDocument2&))
    Print "Error ObjectFromLresult",Error&
    Print "IHTMLDocument2",IHTMLDocument2&
    FreeDLL oleacc&
    Error& = CallMethod(IHTMLDocument2&,9,@Addr(IHTMLElement&))--IHTMLDocument2::get_body
    Print "Error IHTMLDocument2::get_body",Error&
    Print "IHTMLElement",IHTMLElement&
    Print
    ----------------------------------------------Quelltext ermitteln
    Error& = CallMethod(IHTMLElement&,62,@Addr(Text&))--IHTMLElement::get_outerHTML
    Print "Error IHTMLElement::get_outerHTML",Error&
    Print "Result get_outerHTML",Text&
    Print
    Text$ = OLE_WideToMulti(Text&)
    -------------------------------------------------------URL ermitteln
    Error& = CallMethod(IHTMLDocument2&,40,@Addr(Url&))--IHTMLElement::get_URL
    Print "Error IHTMLElement::get_URL",Error&
    Print "Result get_URL",URL&
    Print
    Url$ = OLE_WideToMulti(Url&)
    Print "URL = ";Url$
    Dispose IID#
    @External("ole32","CoUninitialize")
    Return Text$
    EndProc---------------------------------------------------------------------------------
    Window 0,0-800,600
    Declare Fenster&
    Declare Edit&
    Declare Quell$
    Declare IEServerWnd&
    Fenster& = ~FindWindow("IEFrame",0)--Hier könnte man auch andere Möglichkeiten nehmen,

    IfNot Fenster&---------------------z.B. Suche nach Fenstertitel.

        Print "Bitte IE starten!!"------Benötigt wird das gewünschte Hauptfenster des IE!
        WaitInput
        End

    EndIf

    Quell$ = RunningIE_GetText(Fenster&)

    If @Len(Quell$)

        Edit& = @Create("multiedit",%hwnd,"",300,20,450,500)----Text anzeigen
        SetText Edit&,Quell$

    EndIf

    './../../funktionsreferenzen/XProfan/waitkey/'>WaitKey
    End
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
17.05.2006  
 




Sebastian
König
¡Hola Georg,

danke para el Referencia - el problema tritt auch en me en - desafortunadamente podría Yo el Ursache todavía no determinar ...

Como Usted ya geschrieben hast, schlägt el Aufruf

Error& = CallMethod(IHTMLDocument2&,9,@Addr(IHTMLElement&))

fehl, sodass IHTMLElement& no gültigen Schnittstellenzeiger enthält y Intento, una Método así aufzurufen, para Abstruz führt.

Nur ¿qué es exactamente schiefläuft, me está todavía una Rätsel... Das CallMethod incluso es sí Aún con el fin, lo se sólo una Fehler-Cdoe zurückgegeben... Yo voluntad veces versuchen, dessen Bedeutung herauszufinden y melde mich otra vez, si yo algo neues weiß...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
17.05.2006  
 




Sebastian
König
¡Hola Georg,

Der Code es para RPC_E_CANTCALLOUT_ININPUTSYNCCALL. El Descripción dafür lautet:

Ein ausgehender Aufruf kann no ausgeführt voluntad, como el Anwendung una Eingabe-synchronisierten Aufruf weiterleitet.

Sehr komisch...

Como me sonst nichts einfiel, Tuve irgendwie el MultiThread-Konzept en el Verdacht (el Gedanke kam me, porque como sí angeblich algo gleichzeitig stattfindet ...

Jedenfalls Yo entonces folgendes probiert: Call() y Externo() voluntad en el traducir Programmen sí grundsätzlich en el Kontext des Haupt-Hilos ausgeführt, porque uno sí nie wissen kann, si irgendwie Ventana oder Controls erstellt/bearbeitet voluntad... Lo son sin embargo una Möglichkeit, dies a ändern: Wenn Yo, el Code primero sólo übersetze, also make.bat no automáticamente starte, y el erzeugte [Projektname].cpp-Expediente (Achtung: no el PrfMain.cpp) después de el ganzen #include-Anweisungen el beiden Zeilen

#define Externo External_ST
#define Call Call_ST

einfüge, funktioniert lo en una vez...

¿Puede Usted el bestätigen?

MfG

Sebastian

P.S.: Das todo scheint una bekannter Windows-Bug a ser... Gut posible, dass lo genau en el [...]  beschriebene Problema es. Der Abschnitt Symptoms beschreibt nämlich genau el aktuelle Problema
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
17.05.2006  
 




Georg
Hovenbitzer
¡Hola Sebastian,

deine Solución funktioniert con el Demo muy bien

Yo voluntad ellos en el laufe des Tages en el Programa testen en a sehen si hay Schwierigkeiten auftreten.

Melde mich entonces hier.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
18.05.2006  
 




Sebastian
König
¡Hola Georg,

desafortunadamente es muy wahrscheinlich, dass el pauschale Umstellen en el *_ST-Versionen en Deinem Programa a Problemen führt . In el Regel es sí como ya erwähnt incluso notwendig, dass API-Función en el Kontext des Haupt-Hilos ausgeführt voluntad, como hay el todo Fensterverwaltung stattfindet...

Yo habe inzwischen auch veces el bajo el Link (siehe PS en mi Posting oben) gegebenen Vorschlag Use PostMessage instead of a inter-process/inter-thread SendMessage. ausprobiert - auch así es el Fehler Fijo.

Das blöde es sólo: El Alternative kommt eigentlich no en Cuestión. Ursprünglich Tuve para Externo() y Call() tatsächlich PostThreadMessage() benutzt, a irgendwann (Yo glaube lo war aún en el Beta-Phase antes Veröffentlichung de Profano2Cpp) auffiel, dass lo así en Extremsituationen (muy viele Aufrufe en muy corto Tiempo) a Problemen kommen podría . Mit el Umstieg en SendMessage() war entonces alles Haga clic en Aceptar y obendrein todavía el Performance algo mejor, como De hecho, el Umweg en Nachrichtenschleife entfiel ...

So, ahora después de el ganzen Erklären, qué no va, veces una Vorschlag a Solución des Problems :

Dass lo en el Demo con el _ST()-Características auch con usted funktioniert, es sí schonmal super! Mi Concepto wäre ahora, Profano2Cpp así a erweitern, dass con uno speziellen Anweisung en el Profano-Code automáticamente para una cierto Abschnitt en el _ST-Varianten umgeschaltet voluntad kann. Damit se XProfan incluso no encima unbekannte Befehle beschwert, würden se spezielle Kommentare anbieten. In Deinem Code podría lo entonces en etwa así aussehen:
KompilierenMarcaSeparación
Proc Runningie_gettext

    P2CPP: <USE_EXTERNAL_ST>
    Parameters Iehwnd&
    ...
    @External("ole32","CoUninitialize")
    Return Text$
    P2CPP: </USE_EXTERNAL_ST>

E

Was hältst Usted de el Vorschlag?

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
18.05.2006  
 




Georg
Hovenbitzer
¡Hola Sebastian,

Yo kann dich beruhigen

Mein Programa se ejecuta nun sin Fehler, lo gab Aunque un pocos seltsame Effekte como z.B. dass Yo todos DLL con UseDLL Laden musste, qué sin Übersetzen no nötig war.
Anderseits mach el Programa auch no viel, lo ließt el Ver código fuente el Página de y sucht hay después de Links, speichert Bilder y Texto Archivos.
Für el Zukunft wäre deine angedacht Solución muy vom Vorteil, como ellos muy ligeramente en el Profano Code einzubauen es y uno se dadurch auch no el Möglichkeit nimmt deine Plugins a benutzen (como Todavía no herausgefunden habe Yo con el ResHacker Versions Informationen en un Expediente bekomme).
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
19.05.2006  
 




Sebastian
König
¡Hola Georg,

si incluso así ya funktioniert, es el natürlich sólo bastante super!

El vorgeschlagen Kommentar-Schalter voluntad Yo entonces en el nächste Versión einbauen - para größtmögliche Flexibilität incluso getrennte Schalter para Call() y Externo(), el aber en uno einzigen Línea gesetzt voluntad puede, z.B.

P2CPP: <USE_EXTERNAL_ST,USE_CALL_ST>

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
19.05.2006  
 




Georg
Hovenbitzer
¡Hola Sebastian,

Yo mich algo a früh gefreut

Yo habe dir veces una Codebeispiel geschrieben el desafortunadamente después de el manuellen Einfügen de:
#define Externo External_ST
#define Call Call_ST
no funktioniert.
Das Problema liegt daran, dass &UwParam no Valor mehr erhält
KompilierenMarcaSeparación
Def RegisterHotKey(4) !"USER32.DLL","RegisterHotKey"
Def UnregisterHotKey(2) !"USER32.DLL","UnregisterHotKey"
Declare Edit&
Window 100,100-400,400
Edit& = @Create("Edit",%hWnd,"",100,100,150,20)
UserMessages $312
RegisterHotKey(%hWnd,11111,3,80) Strg + Alt + P

WhileNot %Key = 2

    WaitInput
    SetText Edit&,""
    DrawText 20,30,@Space$(30)
    DrawText 20,20,"&UwParam = " + @Str$(&UwParam)

    If ((&UwParam = 11111) And (%GetFocus = Edit&))

        SetText Edit&,"TREFFER !"

    EndIf

EndWhile

UnRegisterHotKey(%hWnd,11111)
UserMessages 0
End
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
23.05.2006  
 



Mir viel como auch todavía lo que uno!

P2CPP: <USE_EXTERNAL_ST,USE_CALL_ST>

Ist denkbar schlecht como Indikator - Rems debería siempre wegoptimierbar ser.

XProfan incluso ha ya solch tollen Befehl SET 

¿Por qué also no
KompilierenMarcaSeparación
set("P2CPP:...",1)
>

Yo glaub el wäre eleganter.
 
23.05.2006  
 




Sebastian
König
Hola si,

[quote:26d3b84306]XProfan incluso ha ya solch tollen Befehl SET

¿Por qué also no

Conjunto(P2CPP:...,1)

Yo glaub el wäre eleganter. [/quote:26d3b84306]
el va desafortunadamente de 2 Gründen no:

1. El Information muss ya para Zeitpunkt el Übersetzung disponible posición - en Conjunto() es el por desgracia, no así, porque uno en efecto una Stringvariable benutzen podría... (dehalb ließ se para Ejemplo el @Conjunto(ESCAPE, n%) de XProfan 9 no correcto umsetzen ).

2. XProfan sería una solche Anweisung con Unbekannter Schalter: P2PP... quittieren...

Oh, gerade fällt me todavía una:

3. Abwärtskompatibilität! Ältere Profano²-Versionen kennen gar kein Conjunto()...

¿Puede Usted el XPSE no simplemente beibringen, en cierto Kommentaren una bischen Zurückhaltung a üben?

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
24.05.2006  
 



[quote:a8como9240c6=Sebastian König]Hola si,

[quote:a8como9240c6]XProfan incluso ha ya solch tollen Befehl SET

¿Por qué also no

Conjunto(P2CPP:...,1)

Yo glaub el wäre eleganter. [/quote:a8como9240c6]
el va desafortunadamente de 2 Gründen no...

...¿Puede Usted el XPSE no simplemente beibringen, en cierto Kommentaren una bischen Zurückhaltung a üben?

[/quote:a8como9240c6]
Ohhhh mein Gott.

Ok, o ne- Concepto: p2cppcompiler$=blub
 
24.05.2006  
 




Sebastian
König
[quote:f983247403]Ohhhh mein Gott.

Ok, o ne- Concepto: p2cppcompiler$=blub [/quote:f983247403]
Yo weiß ahora no tan completamente, lo que quiere decir...

El Solución con esta Kommentar-Befehlen gefällt me eigentlich auch bastante bien, porque ellos muy flexibel es (uno podría incluso para einzelne Aufrufe el Comportamiento ändern), el XProfan-Interpreter o. Compiler überhaupt no stört y gar no unnötigen Overhead producido...
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
24.05.2006  
 




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

5.863 Views

Untitledvor 0 min.
Normann Strübli05.02.2023

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