CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Access violation podczas przekazywania parametrów dla WSDL

Access violation podczas przekazywania parametrów dla WSDL

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

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » czwartek, 21 stycznia 2016, 19:12

A implementacje metod także są w przestrzeniach nazw? Coś mi wygląda, że nie.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » wtorek, 26 stycznia 2016, 09:41

Według mnie wszystko jest w przestrzeni nazw (pliki w załączniku)

A tak tworzę zmienne

KOD cpp:     UKRYJ  
getO::ordersSnType *sn = new getO::ordersSnType;

getO::ns1__requestType *request = new getO::ns1__requestType;

request->authenticate = new getO::ns1__authenticateType;
request->params = new getO::ns1__paramsType;
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » wtorek, 26 stycznia 2016, 13:30

Sam dodawałeś przestrzenie, czy użyłeś wspomnianej opcji przy generowaniu źródeł?

Z błędów linkera wynika, że w stdsoap2.cpp są odwołania do funkcji bez uwzględnienia przestrzeni nazw - trochę to dziwne. Każdy serwis powinien mieć swoją własną wersję pliku stdsoap2.cpp (pokombinuj z opcją -p).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » wtorek, 26 stycznia 2016, 20:01

Generowałem tak jak mi poleciłeś przez "-q getO", w najbliższym czasie spróbuje coś podziałać
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    Windows 7Chrome

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » środa, 27 stycznia 2016, 21:02

Dobra, sprawdziłem u siebie opcję z przestrzeniami i powiem jedno: daj sobie z tym spokój. Ta opcja -q jest kompletnie zjebana (sorry za słowo, ale ono adekwatnie oddaje stan rzeczy).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » czwartek, 28 stycznia 2016, 16:21

Dzięki za sprawdzenie, bo mi już ten gsoap zaczyna bokiem wychodzić :D. To co byś mi zaproponował
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » czwartek, 28 stycznia 2016, 19:15

Innym rozwiązaniem konfliktu nazw jest pisanie drugiego klienta w DLL-ce (idealnie by było, gdyby każdy klient był w oddzielnej DLL-ce, coby porządek w kodzie był).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » poniedziałek, 8 lutego 2016, 17:00

Z tymi bibliotekami nawet sobie poradziłem, jednak mam jeszcze jeden problem, bo nie wiem jak połączyć się przez gsoap na protokole HTTPS
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » poniedziałek, 8 lutego 2016, 19:25

Zapewne wszystko masz opisane w dokumentacji. Tak na szybko: kompilacja z flagą WITH_OPENSSL, co wiąże się z dodaniem biblioteki OpenSSL do projektu.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » środa, 17 lutego 2016, 18:40

Dzięki Ci polymorphism za pomoc, teraz to już jest ok.

Połączyłem się, pobiera dane, jednak nie działa wyświetlanie błędów, tzn. nie wiem jak je odczytać. Np. o nieprawidłowym logowaniu.

np.
http://allegro.pl/webapi/documentation.php/show/id,82#method-error-codes

W wynikach też ich nie ma, jak w innym serwisie z którego korzystałem.
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsChrome

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » czwartek, 18 lutego 2016, 11:34

Trochę nie rozumiem pytania. Przecież funkcje/metody zwracają kody błędów, więc w czym problem?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » wtorek, 23 lutego 2016, 18:17

Dziwne rzeczy zaczęły się dziać. Jeszcze tydzień temu działało bez zarzutu. A mianowicie gdy pobieram wersje struktury drzewa

KOD cpp:     UKRYJ  
        try
        {
                serviceBindingProxy *wsdl = new serviceBindingProxy;

                _ns1__DoQueryAllSysStatusRequest *req = new _ns1__DoQueryAllSysStatusRequest;
                _ns1__doQueryAllSysStatusResponse *wynik = new _ns1__doQueryAllSysStatusResponse;

                req->countryId = 1;
                req->webapiKey = strdup(webapiKey.c_str());

                wsdl->doQueryAllSysStatus(req, *wynik);

                wynik->sysCountryStatus->item[0]->catsVersion;  //-- tutaj wyskakuje błąd Access Violation
        }
        catch (Exception &exception)
        {
                Application->ShowException(&exception);
        }
 


Zapewne nie pobiera danych, tylko dlaczego skoro wszystko działało poprawnie.

KOD cpp:     UKRYJ  
void serviceBindingProxy::serviceBindingProxy_init(soap_mode imode, soap_mode omode)
{       soap_imode(this->soap, imode);
        soap_omode(this->soap, omode);
        soap_endpoint = NULL;
        static const struct Namespace namespaces[] =
{
        {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
        {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
        {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
        {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
        {"ns1", "https://webapi.allegro.pl/service.php", NULL, NULL},
        {NULL, NULL, NULL, NULL}
};
        soap_set_namespaces(this->soap, namespaces);
}
 


KOD cpp:     UKRYJ  
int serviceBindingProxy::doQueryAllSysStatus(const char *endpoint, const char *soap_action, _ns1__DoQueryAllSysStatusRequest *ns1__DoQueryAllSysStatusRequest, _ns1__doQueryAllSysStatusResponse &ns1__doQueryAllSysStatusResponse)
{       struct soap *soap = this->soap;
        struct __ns1__doQueryAllSysStatus soap_tmp___ns1__doQueryAllSysStatus;
        if (endpoint)
                soap_endpoint = endpoint;
        if (soap_endpoint == NULL)
                soap_endpoint = "https://webapi.allegro.pl/service.php";
        if (soap_action == NULL)
                soap_action = "#doQueryAllSysStatus";
        soap_begin(soap);
        soap->encodingStyle = NULL;
        soap_tmp___ns1__doQueryAllSysStatus.ns1__DoQueryAllSysStatusRequest = ns1__DoQueryAllSysStatusRequest;
        soap_serializeheader(soap);
        soap_serialize___ns1__doQueryAllSysStatus(soap, &soap_tmp___ns1__doQueryAllSysStatus);
        if (soap_begin_count(soap))
                return soap->error;
        if (soap->mode & SOAP_IO_LENGTH)
        {       if (soap_envelope_begin_out(soap)
                 || soap_putheader(soap)
                 || soap_body_begin_out(soap)
                 || soap_put___ns1__doQueryAllSysStatus(soap, &soap_tmp___ns1__doQueryAllSysStatus, "-ns1:doQueryAllSysStatus", NULL)
                 || soap_body_end_out(soap)
                 || soap_envelope_end_out(soap))
                         return soap->error;
        }
        if (soap_end_count(soap))
                return soap->error;
        if (soap_connect(soap, soap_url(soap, soap_endpoint, NULL), soap_action)
         || soap_envelope_begin_out(soap)
         || soap_putheader(soap)
         || soap_body_begin_out(soap)
         || soap_put___ns1__doQueryAllSysStatus(soap, &soap_tmp___ns1__doQueryAllSysStatus, "-ns1:doQueryAllSysStatus", NULL)
         || soap_body_end_out(soap)
         || soap_envelope_end_out(soap)
         || soap_end_send(soap))
                return soap_closesock(soap);
        if (!&ns1__doQueryAllSysStatusResponse)
                return soap_closesock(soap);
        ns1__doQueryAllSysStatusResponse.soap_default(soap);
        if (soap_begin_recv(soap)
         || soap_envelope_begin_in(soap)
         || soap_recv_header(soap)
         || soap_body_begin_in(soap))
                return soap_closesock(soap);
        ns1__doQueryAllSysStatusResponse.soap_get(soap, "ns1:doQueryAllSysStatusResponse", NULL);
        if (soap->error)
                return soap_recv_fault(soap, 0);
        if (soap_body_end_in(soap)
         || soap_envelope_end_in(soap)
         || soap_end_recv(soap))
                return soap_closesock(soap);
        return soap_closesock(soap);
}
 


Co może być przyczyną
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsChrome

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » wtorek, 23 lutego 2016, 19:54

Z tabeli widać, że sysCountryStatus jest NULL, a Ty próbujesz czytać z tego:
KOD cpp:     UKRYJ  
 wynik->sysCountryStatus->item[0] ...

Zawsze powinieneś sprawdzać, jaki kod błędu zwraca funkcja. Spróbuj tak:
KOD cpp:     UKRYJ  
serviceBindingProxy *wsdl = new serviceBindingProxy;

_ns1__doQueryAllSysStatusResponse wynik;

int res = wsdl->doQueryAllSysStatus(1, webapiKey, wynik);

if(res == SOAP_OK)
{
        wynik.sysCountryStatus->item[0]->catsVersion;  
        ...
}
else
{
        // 'res' zawiera kod błędu.
        // zajrzyj do stdsoap2.h, masz tam zdefiniowane kody błędów SOAP_xxx, będziesz wiedział co jest problemem.
}
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » środa, 24 lutego 2016, 11:23

Zrobiłem jak zaproponowałeś, i wyszło że jest błąd:

SOAP_SSL_ERROR



Dodałem do pliku biblioteki:
openssl oraz #define WITH_OPENSSL

skompilowało poprawnie jednak nadal wyskakuje ten błąd
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez polymorphism » środa, 24 lutego 2016, 11:30

WITH_OPENSSL dodaj w opcjach projektu.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Poprzednia stronaNastępna strona

  • 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 1 gość

cron