TCppWebBrowser "Invalid floating point operation"

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

TCppWebBrowser "Invalid floating point operation"

Nowy postprzez Cyfrowy Baron » piÄ…tek, 19 czerwca 2009, 11:02

Mam pewien problem z kontrolką TCppWebBrowser. Na ogół działa prawidłowo, ale w pewnych sytuacjach, przy ładowaniu niektórych stron wyskakuje komunikat błędu "Invalid floating point operation". Z moich obserwacji wynika, że jest to jakiś wewnętrzny błąd kontrolki. Po wystąpieniu tego komunikatu, dalsze korzystanie z kontrolki nie jest możliwe, gdyż przestaje ładować strony. Przechwyciłem komunikat błędu i teraz chciałbym jakoś odświeżyć kontrolkę, tak by można było z niej nadal korzystać. Wypróbowałem wiele metod, lecz żadna nie działa.

Szukam sposobu na wyeliminowanie tego błędu, lub na wywołanie jakiejś metody, która odświeży kontrolę umożliwiając tym samym dalsze korzystanie z niej bez konieczności restartu programu. Zaznaczam, że metody Refresh, Refresh2, nie działają.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: TCppWebBrowser "Invalid floating point operation"

Nowy postprzez Cyfrowy Baron » piÄ…tek, 19 czerwca 2009, 12:46

Znalazłem pewne mało "eleganckie" rozwiązanie, ale działa:

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TEdytorMainForm::ApplicationEvents1Exception(TObject *Sender,
      Exception *E)
{
   if(E->Message == "Invalid floating point operation")
   {
    WBTimer->Enabled = true;
    ShowMessage("BÅ‚ad! Nie można zaÅ‚adować wybranej strony");
    WebBrowser1->ExecWB(Shdocvw_tlb::OLECMDID_PROPERTIES,
    Shdocvw_tlb::OLECMDEXECOPT_DODEFAULT);
    WebBrowser1->Stop();
    WebBrowser1->GoBack();
   }
}
//---------------------------------------------------------------------------
void __fastcall TEdytorMainForm::WBTimerTimer(TObject *Sender)
{
HWND hWnd = FindWindow(NULL, "Właściwości");

if(hWnd)
{
  SendMessage(hWnd, WM_CLOSE, 0, 0);
  WBTimer->Enabled = false;
}
}
//---------------------------------------------------------------------------


Z niecierpliwością czekam na lepsze rozwiązanie.
Moje opiera się na tym, że program przechwytuje komunikat błędu, uruchamia Timer, wyskakuje okno właściwości otwieranej strony - to okno jest niezbędne - nie wiem dlaczego, może to jakiś błąd z certyfikatem, w zdarzeniu OnTimer jest pobierany uchwyt do tegoż okna właściwości, nastęnie wysyłany jest komunikat nakazujący zamknięcie okna. Timer się wyłącza, następuje cofnięcie się do wcześniejszej strony.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: TCppWebBrowser "Invalid floating point operation"

Nowy postprzez mckri » piÄ…tek, 22 lipca 2011, 17:56

Zdaje sobie sprawę, że wątek jest bardzo stary, jednak nie było w nim odpowiedzi rozwiązującej problem.
Powyższy problem rozwiązałem stosując w zdarzeniu OnCreate formularza funkcję: Set8087CW(0x133f); Szczegóły w dokumentacji.
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: TCppWebBrowser "Invalid floating point operation"

Nowy postprzez Cyfrowy Baron » piÄ…tek, 22 lipca 2011, 18:28

Niestety! Podane rozwiązanie sprawia, że co prawda komunikat błędu nie wyskakuje, ale i strona się nie ładuje, np. baza Filmweb-u na filmweb.pl.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: TCppWebBrowser "Invalid floating point operation"

Nowy postprzez mckri » sobota, 23 lipca 2011, 19:42

U mnie wyświetla się poprawnie ta strona w kontrolce CppWebBrowser.
A co to właściwie znaczy, że strona się nie ładuje u Ciebie? Czy przed zastosowaniem tej funkcji ta strona się wyświetlała się poprawnie? Jest pusta? Obiekty na stronie są inaczej rozmieszczone niż w typowej przeglądarce (Opera, Mozilla, IE)? Masz wyłączony widok trybu zgodności dla kontroli CppWebBrowser w swoim programie?
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows XPInternet Explorer 8

Re: TCppWebBrowser "Invalid floating point operation"

Nowy postprzez Cyfrowy Baron » sobota, 23 lipca 2011, 20:06

Nie ładuje, czyli, że po kliknięciu na tytuł filmu strona się nie ładuje. Przy czym nie chodzi o cały FilmWeb, lecz o kliknięcie na tytule filmu w wynikach wyszukiwania.
Jaką masz wersję Internet Explorer u siebie, gdyż to jest tutaj istotne. Ja mam IE w wersji 7.0

Masz wyłączony widok trybu zgodności dla kontroli CppWebBrowser w swoim programie?


Kontrolka TCppWebBrowser korzysta z biblioteki IE, więc to co ustawisz w Internet Explorer będzie również dotyczyć kontrolki TCppWebnBrowser.
W IE 7 nie ma czegoś takiego jak tryb zgodności.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: TCppWebBrowser "Invalid floating point operation"

Nowy postprzez mckri » niedziela, 24 lipca 2011, 00:00

Ja mam zainstalowane IE9. Zarówno w przeglądarce jak i w moim programie kontrolka CppWebBrowser wyświetla strony poprawnie.
Nie odpowiedziałes na pytanie, czy problem z wyświetlaniem dotyczy tylko aplikacji i kontrolki CppWebBrowser, czy ma ten problem równiez Twoja wersja IE? Sprawdź na innym komputerze z wyższą wersją IE.
Ja mam IE w wersji 7.0

IE 9 jest obecnie najnowszą przeglądarkę M$ i powinieneś (ale rzecz jasna nie narzucam) ją zaktualizować - nieważne czy chcesz jej używać czy nie. Obsługa widoku zgodności weszła w życie od wersj 8.
Kontrolka TCppWebBrowser korzysta z biblioteki IE, więc to co ustawisz w Internet Explorer będzie również dotyczyć kontrolki TCppWebnBrowser.
Zapewne w wielu kwestiach ustawienie IE ma wpływ na kontrolkę CppWebBrowser, jednak ustawienia "globalnego" wyłączenia widoku zgodności w IE nie znalazłem.
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: TCppWebBrowser "Invalid floating point operation"

Nowy postprzez Cyfrowy Baron » niedziela, 24 lipca 2011, 08:49

mckri napisał(a):Nie odpowiedziałes na pytanie, czy problem z wyświetlaniem dotyczy tylko aplikacji i kontrolki CppWebBrowser, czy ma ten problem równiez Twoja wersja IE? Sprawdź na innym komputerze z wyższą wersją IE.


Problem dotyczy tylko kontrolki, gdyż IE ma wbudowaną obsługę błędów skryptów, a to błędy skryptów w serwisie FilmWeb.

mckri napisał(a):IE 9 jest obecnie najnowszą przeglądarkę M$ i powinieneś (ale rzecz jasna nie narzucam) ją zaktualizować - nieważne czy chcesz jej używać czy nie. Obsługa widoku zgodności weszła w życie od wersj 8.


Może sobie być najnowsza, ja korzystam z Firefox 6 i nigdy nie przejdę na IE. Nie mogę zainstalować IE 9, gdyż ta wersja nie została przewidziana dla Windows XP.

Co do widoku zgodności, to:

windows.microsoft.com napisał(a):Po włączeniu Widoku zgodności przeglądana strona sieci Web — tak jak wszystkie inne w danej domenie — będzie wyświetlana tak jak przy użyciu wcześniejszej wersji programu Internet Explorer.


Tutaj nie występuje problem z tym, że serwis został przystosowany do wcześniejszych wersji przeglądarki IE, ale wręcz przeciwnie.
Co się zaś tyczy IE 8, to nie instaluję tej wersji, gdyż jest tylko gorzej.

mckri napisał(a):Zapewne w wielu kwestiach ustawienie IE ma wpływ na kontrolkę CppWebBrowser,


Wszystko co ustawiasz w Opcjach internetowych dotyczy również kontrolki TCppWebBrowser, gdyż jest to tylko kontrolka ActiveX, a nie samodzielna biblioteka. Możliwości tej kontrolki są uzależnione od jej wersji, ale przede wszystkim od wersji biblioteki SHDOCVW.DLL. U mnie ta biblioteka występuje w wersji 6.0.2900.2987

Zauważ, że podany przeze mnie sposób rozwiązuje problem, a co się zaś tyczy podanego przez Ciebie rozwiązania, to w dokumentacji możemy przeczytać:


The floating-point unit control word controls the precision of floating-point calculations, the rounding mode, and whether certain floating-point operations trigger exceptions. See the Intel processor documentation for details.




oraz:


We recommend that you disable all floating-point exceptions when using OpenGL to render 3D graphics. To do this, call Set8087CW(0x133f) in your main form's OnCreate event before calling any OpenGL functions.


Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 11 gości

cron