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 » środa, 4 marca 2015, 14:25

A co tu więcej mówić. W konstruktorze DoChangeItemFieldsRequest masz:
KOD cpp:     UKRYJ  
FfieldsToModify.set_length(1);

czyli tablica FfieldsToModify ma jedno pole, które jest wskaźnikiem FieldsValue*. Pole to na nic nie wskazuje, ponieważ nic do niego nie przypisałeś. Stąd prosty wniosek, że musisz stworzyć obiekt FieldsValue na stercie i przypisać jego adres nowemu polu w tablicy FfieldsToModify. Robisz tak zawsze, gdy zwiększasz rozmiar tej tablicy (i generalnie tablic wskaźników).
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 » piątek, 6 marca 2015, 13:26

Nie wiem czy oto chodzi, dopisałem kod:

KOD cpp:     UKRYJ  
   DoChangeItemFieldsRequest *item = new DoChangeItemFieldsRequest;
   doChangeItemFieldsResponse *wynik_item = new doChangeItemFieldsResponse;

   FieldsValue *pole = new FieldsValue;

   item->fieldsToModify.set_length(1);
   item->fieldsToModify[0] = pole;

   __int64 it = StrToFloat(nr_aukcji->Text);

   item->sessionId = sesja;
   item->itemId = it;
   item->fieldsToModify[0]->fid = 50;
   item->fieldsToModify[0]->fvalueString = "";
   item->fieldsToModify[0]->fvalueInt = 0;
   item->fieldsToModify[0]->fvalueFloat = 3.94;
 


nie wyskakuje już błąd, jednak nie wiem czy to wina API na serwerze czy coś źle robię, bo zmiany na serwerze nie są widoczne
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 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » sobota, 2 maja 2015, 16:47

Witam ponownie

Bardzo potrzebuję pomocy

Mam taki kod
KOD cpp:     UKRYJ  
DoNewAuctionExtRequest *fields = new DoNewAuctionExtRequest();
                doNewAuctionExtResponse *wynik_fields;

                _di_servicePort myAllegro = GetservicePort();

                zlecenia->pobierz_sesje();
                fields->sessionHandle = zlecenia->sesja;

                TByteDynArray img;

                fields->fields.set_length(1);
                fields->fields[0] = new FieldsValue;

                fields->fields[0]->fid = 1;
                fields->fields[0]->fvalueString = "Test";
                fields->fields[0]->fvalueInt = 0;
                fields->fields[0]->fvalueFloat = 0;
                fields->fields[0]->fvalueDate = "0";
                fields->fields[0]->fvalueImage = img;
                fields->fields[0]->fvalueDatetime = 0;
                fields->fields[0]->fvalueRangeInt->fvalueRangeIntMin = 0;
                fields->fields[0]->fvalueRangeInt->fvalueRangeIntMax = 0;
                fields->fields[0]->fvalueRangeFloat->fvalueRangeFloatMin = 0;
                fields->fields[0]->fvalueRangeFloat->fvalueRangeFloatMax = 0;
                fields->fields[0]->fvalueRangeDate->fvalueRangeDateMin = 0;
                fields->fields[0]->fvalueRangeDate->fvalueRangeDateMax = 0;

                wynik_fields = myAllegro->doNewAuctionExt(fields);

                delete fields;
                delete wynik_fields;


Jednak dane nie są przekazywane do serwisu.

Przykładowy kod w PHP działa prawidłowo, wiem że chodzi o tą tablice w tablicy, jednak nie wiem jak to rozwiązać
KOD php:     UKRYJ  
$request = array(
     'sessionHandle' => $session['sessionHandlePart'],
     'fields' => array(
        array (
        'fid' => 1,
         'fvalue-string' => 'Test',
         'fvalue-int' => 0,
         'fvalue-float' => 0,
         'fvalue-image' => 0,
         'fvalue-datetime' => 0,
         'fvalue-date' => '',
         'fvalue-range-int' => array(
                'fvalue-range-int-min' => 0,
                'fvalue-range-int-max' => 0),
         'fvalue-range-float' => array(
                'fvalue-range-float-min' => 0,
                'fvalue-range-float-max' => 0),
         'fvalue-range-date' => array(
                'fvalue-range-date-min' => '',
                'fvalue-range-date-max' => '')
        )

        $wynik = $soapClient->doNewAuctionExt($request);
 


Prosiłbym o nakierowanie mnie jak rozgryźć tą sprawę.
Ostatnio edytowano sobota, 2 maja 2015, 17:01 przez polymorphism, łącznie edytowano 2 razy
Powód: Używaj znaczników CPP!
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 » niedziela, 3 maja 2015, 13:35

KOD cpp:     UKRYJ  
fields->fields[0]->fvalueDate = "0";

Pewny jesteś tego zera? Bo według dokumentacji format daty powinien być taki: dd-mm-yyyy. W kodzie php masz pusty string. Dlaczego nie dałeś pustego łańcucha w swoim kodzie?
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, 4 maja 2015, 19:17

Pewnie przeoczyłem, jednak poprawienie tego nie rozwiązało problemu, z drugiej strony testowałem też w PHP, gdy podam tylko dwie wartości np. fid i fvalueString to i tak zostaną przekazane.
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 » poniedziałek, 4 maja 2015, 20:28

No a jaki kod błędu zwraca ta metoda?
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, 5 maja 2015, 17:39

O to chodzi że w PHP wyskakuję błąd że nie ma podanych kolejnych parametrów


podano parametru obowiązkowego o fid: 2



a w C++ wyskakuje błąd że nie


podano parametru obowiązkowego o fid: 1



W innym serwisie też mam z tym problem w PHP wszystko działa bez problemu, jednak jak jest tablica w tablicy to nie przekazuje parametrów.
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 » wtorek, 5 maja 2015, 18:10

Trudno powiedzieć, w czym problem.

Pliki biblioteki allegro generowałeś sobie sam, czy użyłeś gotowych?
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, 5 maja 2015, 19:56

Gotowe, poprzez WSDL Importer
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, 6 maja 2015, 10:04

Czyli wygenerowałeś :) No nic, chyba nie jestem w stanie Ci pomóc. Kompletnie nie znam tej biblioteki, opieram się jedynie na dokumentacji, która pisana jest pod PHP.
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 XPFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » środa, 6 maja 2015, 18:50

A wiesz jak w inny sposób można połączyć się WSDL? Chętnie się go nauczę :)
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, 6 maja 2015, 19:15

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 Mironas » środa, 6 maja 2015, 19:34

Pisałem kiedyś jakiś program w C++BuilderXE korzystający z SOAP. Program wykorzystywał standardowe komponenty środowiska. Z tamtych czasów zostały mi notatki, jeśli masz ochotę się w nie wczytywać to proszę:

KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
Soap Server Application CGI
//---------------------------------------------------------------------------
//  File >> New >> Other >> C++ Builder Projects >> WebServices >> SOAP Server Application
//  New SOAP Server Application (do wyboru)
//    * CGI Stand-alone executable
//---------------------------------------------------------------------------
//                          Moduł sieciowy SOAP
//---------------------------------------------------------------------------
THTTPSoapDispatcher   // Odbieranie żądań przychodzących i przekazywanie ich do innego komponentu
//---------------------------------------------------------------------------
// WŁAŚCIWOŚCI:
  Dispatcher          // Komponent do którego będą przesyłane żądania

//---------------------------------------------------------------------------
THTTPSoapCppInvoker   // Wykonywanie żądań:
                      //  - spr. interfejsu i klasy (czy jest rejestrze wywołań)
                      //  - wywołanie metody C++
                      //  - generowanie odpowiedzi i zwrócenie jej do THTTPSoapDispatcher

//---------------------------------------------------------------------------
TWSDLHTMLPublish      // Tworzenie WSDL (języka opisu usługi sieciowej)
                      // definiującego interfejs usługi sieciowej

//---------------------------------------------------------------------------
//                          Interfejs sieciowy
//---------------------------------------------------------------------------
//  File >> New >> Other >> C++ Builder Projects >> WebServices >> SOAP Server Interface
//    Service name              - wpisać nazwę pliku
//    Generate sample methods   - generuj przykładowe metody (lub nie)

//---------------------------------------------------------------------------
// Dodanie metod do *.h
// __interface INTERFACE_UUID .....
public:
  virtual float FunkcjaABC(float cm) = 0;

//---------------------------------------------------------------------------
// Dodanie metod do *.cpp
// class TCmInchImpl .....
  virtual float FunkcjaABC(float cm);
//---------------------------------------------------------------------------
float TCmInchImpl::FunkcjaABC(float cm)
{
  return cm / 2.54;
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//                          UWAGA - BŁĘDY
//---------------------------------------------------------------------------
// Błąd:
//  Unresolved external 'CertOpenSystemStoreW' (lub inne) referenced from ....
// Dodać do pliku projektu lub do Unit1.cpp:
#pragma link "crypt32.lib"
//---------------------------------------------------------------------------
 


KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
//  Aplikacja typu SOAP Client
//---------------------------------------------------------------------------
/*
  1. Utworzyć standardową aplikację.
 
  2. Dodać importer WSDL
      * File >> New >> Other >> C++ Builder Projects >> WebServices >> WSDL Importer
      * Location of WSDL File or URL:
        http://localhost/cgi-bin/SoapServerAppC ... Interfejsu
 
  2.b. Zainkludować plik naglowkowy importera do Form1.cpp

  3. Na Form1 umieścić HTTPRIO1
      * WSDLLocation:
        http://localhost/cgi-bin/SoapServerAppC ... Interfejsu
      * ICmInchservice = NazwaInterfejsu (lista pobierana z serwera)
      * Port = PortUslugi (lista pobierana z serwera)
      UWAGA - Właściwości ustawiać w podanej kolejności
      lub
      * URL:
        http://localhost/cgi-bin/SoapServerAppC ... Interfejsu
        UWAGA! w adresie zamienia się 'wsdl' >> 'soap'
 
  4. Dodać kod np.:
*/

// Centymetry na cale
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  // typ wg pliku naglowgowego uslugi, wiersz: typedef DelphiInterface<[...]> _di_IKlasaInterfejsu;
  _di_IKlasaInterfejsu service;
 
  HTTPRIO1->QueryInterface(service);
  if ( service )
  {
    float cm    = StrToFloatDef(Edit1->Text, 0.0);
    float inch  = service->Cm2Inch(cm);
    Edit2->Text = FormatFloat("#0.00", inch);
  }
}
//---------------------------------------------------------------------------
 
//---------------------------------------------------------------------------
//                            Komponenty
//---------------------------------------------------------------------------
THTTPRIO      // Przekazuje funkcje z serwera do lokalnej aplikacji

// WŁAŚCIWOŚCI:
  WSDLLocation    // Lokalizacja usługi (Plik lub adres usługi WSDL)
  ICmInchservice  //
  Port            //
  URL             // Alternatywa dla WSDLLocation+ICmInchservice+Port
                  //  Działa trochę szybciej
                  //  UWAGA! w adresie zamienić 'wsdl' >> 'soap'

// METODY:
  QueryInterface(...)   // Pobranie interfejsu z serwera

//---------------------------------------------------------------------------
 


KOD cpp:     UKRYJ  
//===========================================================================
/*
  SoapServerManual
  Tworzenie serwera SOAP ręcznie (bez kreatora)
*/

//===========================================================================
//  1.  Utworzyć standardową aplikację.

//===========================================================================
//  2.  Dodać do plików:

//---------------------------------------------------------------------------
[Project1.cbproj]   // w konarze <ItemGroup>
//---------------------------------------------------------------------------
                        <ObjFiles Include="IdHTTPWebBrokerBridge.obj">
                                <IgnorePath>true</IgnorePath>
                                <BuildOrder>2</BuildOrder>
                        </ObjFiles>

//---------------------------------------------------------------------------
[Project1.cpp]
//---------------------------------------------------------------------------
// pomiędzy USEFORM a WINAPI:
#pragma link "WebReq.obj"                       ///
#pragma link "IndySystem.lib"                   ///
#pragma link "IndyCore.lib"                     /// dodane
#pragma link "IndyProtocols.lib"                ///
#pragma link "IdHTTPWebBrokerBridge.obj"        ///
extern PACKAGE TComponentClass WebModuleClass;  ///
//---------------------------------------------------------------------------
// w WINAPI _tWinMain .... try ... (na początku)
    if ( WebRequestHandler() != NULL )                        /// dodane
      WebRequestHandler()->WebModuleClass = WebModuleClass;   ///

//---------------------------------------------------------------------------
[Unit1.h]
//---------------------------------------------------------------------------
#include <IdHTTPWebBrokerBridge.hpp>  /// dodane
//---------------------------------------------------------------------------
private:
  TIdHTTPWebBrokerBridge *FServer;
  void __fastcall StartServer();

//---------------------------------------------------------------------------
[Unit1.cpp]
//---------------------------------------------------------------------------
// FormCreate
// FormDestroy
// btnXxxxxOnClick
//---------------------------------------------------------------------------
void __fastcall TForm1::StartServer()
{
  if ( !FServer->Active )
  {
    FServer->Bindings->Clear();
    FServer->DefaultPort = StrToIntDef(Edit1->Text, 8080);
    FServer->Active = true;
  }
}
//---------------------------------------------------------------------------

//===========================================================================
//  3.  Dołączyć do projektu 'Unit_WebModule.*':

//===========================================================================
//  4.  Dołączyć 'Interfejs sieciowy'
//  File >> New >> Other >> C++ Builder Projects >> WebServices >> SOAP Server Interface
//    Service name  - wpisać nazwę pliku/interfejsu
 
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 446
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 21
Otrzymał podziękowań: 63
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » poniedziałek, 11 maja 2015, 19:16

polymorphism napisał(a):A to -> http://www.cs.fsu.edu/~engelen/soap.html ?


miałbym małą prośbę, mógłbyś zdradzić jak sie połączyć przez tą bibliotekę z wsdl allegro, bo od kilku dni szukam, kombinuje i nic nie mogę znaleźć,
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 » wtorek, 12 maja 2015, 18:57

Jutro posiedzę na tym. Zobaczymy, co z tego wyjdzie.
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