CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [BCB6] Problem z wyłączaniem programu i kodowaniem

[BCB6] Problem z wyłączaniem programu i kodowaniem

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

[BCB6] Problem z wyłączaniem programu i kodowaniem

Nowy postprzez areq47 » czwartek, 7 kwietnia 2011, 16:14

Witam,
Piszę program do obsługi poczty email. Korzystam z C++ Builder 6 i komponentów TIDMessage, TIDPop3, TIDSmtp, CppWebBrowser.

Pocztę pobieram do Memo i z memo wyświetlana jest w CppWebBrowser. Robiłem to jak w przykładzie Cyfrowego Barona:

KOD cpp:     UKRYJ  
TMemoryStream *stm = new TMemoryStream();
WiadomoscMemo->Lines->SaveToStream(stm);

IPersistStreamInit *psi;
stm->Seek(0, 0);

TStreamAdapter *sa = new TStreamAdapter(stm, soReference);

if (SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))
    psi->Load(*sa);

delete stm;


i podczas tworzenia formularza (onCreate):
KOD cpp:     UKRYJ  
CppWebBrowser1->Navigate(WideString( "about:blank" ));


Wszystko dobrze działa, ale przy wyłączaniu programu pokazuje się błąd:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at adress 0040235B in module 'Project1.exe'. Read of adress 00000000'. Process stopped. Use Srep or Run to continue.



Builder podświetla linijkę, która powoduje błąd:
KOD cpp:     UKRYJ  
if (SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))


Co w tym wypadku może być źle?

Czy macie może jakiś sposób na zmianę kodowania na UTF-8 w CppWebBrowserze? Czasami maile mają dobre kodowanie, a czasami złe.

//EDIT Zauważyłem że tego błędu nie ma, jak wyłączam program przy braku wczytanego maila do cppwebbrowser (kiedy jest pusta)
Ostatnio edytowano środa, 3 sierpnia 2011, 15:02 przez areq47, łącznie edytowano 2 razy
Avatar użytkownika
areq47
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): czwartek, 7 kwietnia 2011, 15:59
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows 7 64bit
Kompilator: Builder 6
Gadu Gadu: 668046
    Windows 7Firefox

Re: [BCB6] Problem z CPPWebBrowser

Nowy postprzez Cyfrowy Baron » czwartek, 7 kwietnia 2011, 16:43

Z tego co jeszcze pamiętam odnośnie C++Builder 6, to ten błąd pojawiał się zawsze gdy w aplikacji używało się kontrolki TCPPWebBrowser i komponentów INDY. Jedno z drugim się gryzie... Kontrolka CPPWebBrowser w środowisku C++Builder będzie powodować więcej problemów, ale z tego co się orientuję to tylko w wersji Personal.

Sprawdź czy masz takie wpisy w pliku źródłowym:

KOD cpp:     UKRYJ  
//  MSHTML INTERFACE
#include <mshtmhst.h>
#include <mshtmcid.h>
#include <Mshtml.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)

#pragma link "shdocvw_ocx"
#pragma link "shdocvw"

#pragma resource "*.dfm"


Jeżeli nie to je dodaj, być może to pomoże.
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: [BCB6] Problem z CPPWebBrowser

Nowy postprzez areq47 » czwartek, 7 kwietnia 2011, 17:12

Niestety dołączenie tych wpisów nie pomogło.
Mam wersję C++ Builder 6 Professional.

Czy jest może inny komponent niż cppwebbrowser, który mógłby wyświetlać te maile?? Ew. inne komponenty do odbierania maili (takie żeby się razem nie gryzły)?
Avatar użytkownika
areq47
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): czwartek, 7 kwietnia 2011, 15:59
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows 7 64bit
Kompilator: Builder 6
Gadu Gadu: 668046
    Windows 7Firefox

Re: [BCB6] Problem z CPPWebBrowser

Nowy postprzez Cyfrowy Baron » czwartek, 7 kwietnia 2011, 17:48

TCppWebBrowser nie jest komponentem, lecz kontrolką ActiveX bazującą na bibliotekach przeglądarki IE. Nigdy nie zetknąłem się z niczym podobnym do tej kontrolki.

By się upewnić, że błąd wywołuje pakiet INDY stwórz testową aplikację tylko z TCppWebBrowser bez INDY.

W nowszych wersjach środowiska ten problem nie występuje.
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: [BCB6] Problem z CPPWebBrowser

Nowy postprzez areq47 » czwartek, 7 kwietnia 2011, 18:00

Obszedłem ten problem trochę naokoło. Podczas zamykania aplikacji wyświetlam pustą stronę w cppwebbrowser i czyszczę memo. W takim wypadku nie ma błędu ;)

Może ma ktoś pomysł z tym kodowaniem UTF-8 (polskie znaki)??
Avatar użytkownika
areq47
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): czwartek, 7 kwietnia 2011, 15:59
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows 7 64bit
Kompilator: Builder 6
Gadu Gadu: 668046
    Windows 7Firefox

Re: [BCB6] Problem z CPPWebBrowser

Nowy postprzez Cyfrowy Baron » czwartek, 7 kwietnia 2011, 18:24

Ja stworzyłem sobie taką funkcję dekodujące:

KOD cpp:     UKRYJ  
String __fastcall Decode_ISO_88591(String webText)
{
 webText = StringReplace(webText, "+", " ", TReplaceFlags() << rfReplaceAll);

 String tabLitery =
   L"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ";

 String tabSymbole[] = {
 "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil",
 "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml",
 "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", "Oslash",
 "Ugrave", "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "szlig", "agrave",
 "aacute", "acirc", "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
 "eacute", "ecirc", "euml", "igrave", "iacute", "icirc", "iuml", "eth",
 "ntilde", "ograve", "oacute", "ocirc", "otilde", "ouml", "oslash", "ugrave",
 "uacute", "ucirc", "uuml", "yacute", "thorn", "yuml"
 };

 for(unsigned int i = 0; i < ARRAYSIZE(tabSymbole); i++)
 {
  webText = StringReplace(webText, "&" + tabSymbole[i] + ";", tabLitery[i + 1],
                                            TReplaceFlags() << rfReplaceAll);
 }


 return webText;
}


Co do UTF8 to w C++Builder 2010 są na to gotowe funkcje, ale u Ciebie może zadziała coś takiego:

KOD cpp:     UKRYJ  
String __fastcall UnicodeToUtf8(String webText)
{
 String tabLitery = L"ĄąĆćĘꣳŃńŚśŻżŹź";

 String tabSymbole[] = {L"Ä„", L"Ä…", L"Ć", L"ć", L"Ę", L"Ä™", L"Ł",
 L"Ĺ‚", L"Ń", L"Ĺ„", L"Ĺš", L"Ĺ›", L"Ĺ»", L"ĹĽ", L"Ĺą", L"Ĺş"};


 for(unsigned int i = 0; i < ARRAYSIZE(tabSymbole); i++)
 {
  webText = StringReplace(webText, tabSymbole[i], tabLitery[i + 1],
                                            TReplaceFlags() << rfReplaceAll);
 }


 return webText;
}
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: [BCB6] Problem z CPPWebBrowser

Nowy postprzez areq47 » wtorek, 3 maja 2011, 15:05

Cyfrowy Baron napisał(a):
Co do UTF8 to w C++Builder 2010 są na to gotowe funkcje, ale u Ciebie może zadziała coś takiego:

KOD cpp:     UKRYJ  
String __fastcall UnicodeToUtf8(String webText)
{
 String tabLitery = L"ĄąĆćĘꣳŃńŚśŻżŹź";

 String tabSymbole[] = {L"Ä„", L"Ä…", L"Ć", L"ć", L"Ę", L"Ä™", L"Ł",
 L"Ĺ‚", L"Ń", L"Ĺ„", L"Ĺš", L"Ĺ›", L"Ĺ»", L"ĹĽ", L"Ĺą", L"Ĺş"};


 for(unsigned int i = 0; i < ARRAYSIZE(tabSymbole); i++)
 {
  webText = StringReplace(webText, tabSymbole[i], tabLitery[i + 1],
                                            TReplaceFlags() << rfReplaceAll);
 }


 return webText;
}


Użyłem tej funkcji i niektóre znaki się zamieniają, ale jest problem z literą "ą" i "ś". O co tu może chodzić? Krzaczki oznaczające te litery zostają
Avatar użytkownika
areq47
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): czwartek, 7 kwietnia 2011, 15:59
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows 7 64bit
Kompilator: Builder 6
Gadu Gadu: 668046
    Windows 7Firefox


Powrót do Aplikacje sieciowe

Kto przegląda forum

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

cron