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..

Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » piątek, 18 lipca 2014, 12:55

Witam serdecznie

Od kilku dni pisze aplikacje sieciową opartą o WSDL Importer,

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   DoQueryAllSysStatusRequest *request = new DoQueryAllSysStatusRequest();
   doQueryAllSysStatusResponse *response = new doQueryAllSysStatusResponse();
   String webapiKey = "xxxxxx";

   _di_servicePort myWSDL = GetservicePort();
   request->countryId = 1;
   request->webapiKey = webapiKey;
   response = myWSDL->doQueryAllSysStatus(request);

   String verKey = response->sysCountryStatus[0][0].verKey;

   DoLoginEncRequest *login = new DoLoginEncRequest();
   doLoginEncResponse *wynik_logowania = new doLoginEncResponse();

   login->userLogin = "xxx";
   login->userHashPassword = "xxxx";
   login->countryCode = 1;
   login->webapiKey = webapiKey;
   login->localVersion = StrToInt(verKey);

   wynik_logowania = myWSDL->doLoginEnc(login);

   sessionHandlePart = wynik_logowania->sessionHandlePart;

   DoGetMySoldItemsRequest *mysold = new DoGetMySoldItemsRequest();
   doGetMySoldItemsResponse *wynik_mySold = new doGetMySoldItemsResponse();

   try
   {
           mysold->sessionId = sessionHandlePart;
           mysold->sortOptions->sortType = 1;
        //   mysold->sortOptions->sortOrder = 2;
        //   mysold->filterOptions->filterFormat = 0;
        //   mysold->filterOptions->filterFromEnd = 0;
           mysold->searchValue = "";
           mysold->pageSize = 60;
           mysold->pageNumber = 0;

           wynik_mySold = myWSDL->doGetMySoldItems(aukcje);

           ShowMessage(wynik_mySold->soldItemsCounter);
   }
   catch(...)
   {
            ShowMessage("błąd");
   };
}
 


i podczas przypisania parametru
KOD cpp:     UKRYJ  
mysold->sortOptions->sortType = 1;


wyskakuje błąd

access violation



który po przerwaniu przeskakuje do klasy w miejscu przypisywania zmiennej
KOD cpp:     UKRYJ  
class SortOptionsStruct : public TRemotable {
private:
  int             FsortType;
  bool            FsortType_Specified;
  int             FsortOrder;
  bool            FsortOrder_Specified;

  void __fastcall SetsortType(int Index, int _prop_val)
  {
        FsortType = _prop_val;   <------- W tym miejscu jest błąd
        FsortType_Specified = true;
  }

  bool __fastcall sortType_Specified(int Index)
  {  return FsortType_Specified; }

  void __fastcall SetsortOrder(int Index, int _prop_val)
  {  FsortOrder = _prop_val; FsortOrder_Specified = true;  }

  bool __fastcall sortOrder_Specified(int Index)
  {  return FsortOrder_Specified;  }

__published:
  __property int          sortType = { index=(IS_OPTN), read=FsortType, write=SetsortType, stored = sortType_Specified };
  __property int         sortOrder = { index=(IS_OPTN), read=FsortOrder, write=SetsortOrder, stored = sortOrder_Specified };
};
 


Wie ktoś może co jest z tym nie tak?

Pozdrawiam
Ostatnio edytowano piątek, 18 lipca 2014, 13:53 przez polymorphism, łącznie edytowano 1 raz
Powód: Zmiana znaczników CODE na CPP
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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 polymorphism » piątek, 18 lipca 2014, 14:01

Na 99%, że wskaźnik DoGetMySoldItemsRequest::sortOptions zawiera niepoprawny adres.


p.s. mysold i wynik_mySold powinny być (chyba) zwolnione przed wyjściem z funkcji.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » sobota, 19 lipca 2014, 08:42

Dziękuję CI polymorphism za odpowiedź jednakże niewiele mi ona pomogła

Co do zwalniania z pamięci to mam dodane jednak go nie skopiowałem.

Zapomniałem wcześniej dodać klasę DoGetMySoldItemsRequest

KOD cpp:     UKRYJ  
class DoGetMySoldItemsRequest : public TRemotable {
private:
  UnicodeString   FsessionId;
  SortOptionsStruct* FsortOptions;
  bool            FsortOptions_Specified;
  SoldFilterOptionsStruct *FfilterOptions;
  bool            FfilterOptions_Specified;
  UnicodeString   FsearchValue;
  bool            FsearchValue_Specified;
  int             FcategoryId;
  bool            FcategoryId_Specified;
  ArrayOfLong     FitemIds;
  bool            FitemIds_Specified;
  int             FpageSize;
  bool            FpageSize_Specified;
  int             FpageNumber;
  bool            FpageNumber_Specified;

  void __fastcall SetsortOptions(int Index, SortOptionsStruct *_prop_val)
  {  FsortOptions = _prop_val; FsortOptions_Specified = true;  }

  bool __fastcall sortOptions_Specified(int Index)
  {  return FsortOptions_Specified;  }

  void __fastcall SetfilterOptions(int Index, SoldFilterOptionsStruct* _prop_val)
  {  FfilterOptions = _prop_val; FfilterOptions_Specified = true;  }

  bool __fastcall filterOptions_Specified(int Index)
  {  return FfilterOptions_Specified;  }

  void __fastcall SetsearchValue(int Index, UnicodeString _prop_val)
  {  FsearchValue = _prop_val; FsearchValue_Specified = true;  }

  bool __fastcall searchValue_Specified(int Index)
  {  return FsearchValue_Specified;  }

  void __fastcall SetcategoryId(int Index, int _prop_val)
  {  FcategoryId = _prop_val; FcategoryId_Specified = true;  }

  bool __fastcall categoryId_Specified(int Index)
  {  return FcategoryId_Specified;  }

  void __fastcall SetitemIds(int Index, ArrayOfLong _prop_val)
  {  FitemIds = _prop_val; FitemIds_Specified = true;  }

  bool __fastcall itemIds_Specified(int Index)
  {  return FitemIds_Specified;  }

  void __fastcall SetpageSize(int Index, int _prop_val)
  {  FpageSize = _prop_val; FpageSize_Specified = true;  }

  bool __fastcall pageSize_Specified(int Index)
  {  return FpageSize_Specified;  }

  void __fastcall SetpageNumber(int Index, int _prop_val)
  {  FpageNumber = _prop_val; FpageNumber_Specified = true;  }

  bool __fastcall pageNumber_Specified(int Index)
  {  return FpageNumber_Specified;  }

public:
  __fastcall  DoGetMySoldItemsRequest();
  __fastcall ~DoGetMySoldItemsRequest();
__published:
  __property UnicodeString  sessionId = { read=FsessionId, write=FsessionId };
  __property SortOptionsStruct *sortOptions = { index=(IS_OPTN), read=FsortOptions, write=SetsortOptions, stored = sortOptions_Specified };
  __property SoldFilterOptionsStruct* filterOptions = { index=(IS_OPTN), read=FfilterOptions, write=SetfilterOptions, stored = filterOptions_Specified };
  __property UnicodeString searchValue = { index=(IS_OPTN), read=FsearchValue, write=SetsearchValue, stored = searchValue_Specified };
  __property int        categoryId = { index=(IS_OPTN), read=FcategoryId, write=SetcategoryId, stored = categoryId_Specified };
  __property ArrayOfLong    itemIds = { index=(IS_OPTN), read=FitemIds, write=SetitemIds, stored = itemIds_Specified };
  __property int          pageSize = { index=(IS_OPTN), read=FpageSize, write=SetpageSize, stored = pageSize_Specified };
  __property int        pageNumber = { index=(IS_OPTN), read=FpageNumber, write=SetpageNumber, stored = pageNumber_Specified };
};
 


Prosiłbym o nakierowanie w czym tkwi ten błąd z access violation, zaznaczę jeszcze że gdy nie podaje tego parametru to pobiera bez problemu dane
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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 » sobota, 19 lipca 2014, 09:04

Dziękuję CI polymorphism za odpowiedź jednakże niewiele mi ona pomogła

Taka odpowiedź, jakie dane. Ale nie myliłem się, wskaźnik DoGetMySoldItemsRequest::FsortOptions jest niezainicjalizowany, dlatego masz błąd AV. W konstruktorze stwórz obiekt SortOptionsStruct, a jego adres przypisz FsortOptions (w destruktorze musisz ten obiekt oczywiście usunąć, ewentualnie użyj inteligentnych wskaźników). To samo z FfilterOptions...


--- po chwili dodane ---

KOD cpp:     UKRYJ  
void __fastcall SetsortOptions(int Index, SortOptionsStruct *_prop_val)
        {  FsortOptions = _prop_val; FsortOptions_Specified = true;  }
 

Po co robisz setter dla tej opcji? Tak czy siak tu też musisz zadbać o poprawne zarządzanie pamięcią - czyli zwolnić "stary" FsortOptions przed przypisaniem nowego.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
mate006
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » poniedziałek, 21 lipca 2014, 11:47

O wielkie Ci dzięki za nakierowanie, aż dziw że sam na to nie wpadłem. Jednak mam kolejny problem z którym pierwszy raz w życiu się spotykam. a mianowicie pobrało mi dane z serwera jednak nie mam pomysłu jak odczytać dane z DynamicArray przypisanej do klasy ItemPriceStruct

KOD cpp:     UKRYJ  
typedef DynamicArray<ItemPriceStruct*> ArrayOfItempricestruct;

class ItemPriceStruct : public TRemotable {
private:
  int             FpriceType;
  float           FpriceValue;
__published:
  __property int         priceType = { read=FpriceType, write=FpriceType };
  __property float      priceValue = { read=FpriceValue, write=FpriceValue };
};

class SellItemStruct : public TRemotable {
private:
  __int64         FitemId;
  UnicodeString   FitemTitle;
  UnicodeString   FitemThumbnailUrl;
  ArrayOfItempricestruct FitemPrice;
  bool            FitemPrice_Specified;
  int             FitemStartQuantity;
  int             FitemSoldQuantity;
  int             FitemQuantityType;
  __int64         FitemStartTime;
  __int64         FitemEndTime;
  UnicodeString   FitemEndTimeLeft;
  int             FitemBiddersCounter;
  UserInfoStruct* FitemHighestBidder;
  int             FitemCategoryId;
  int             FitemWatchersCounter;
  int             FitemViewsCounter;
  UnicodeString   FitemNote;
  int             FitemSpecialInfo;
  int             FitemShopInfo;
  __int64         FitemProductInfo;
  int             FitemPayuInfo;
  void __fastcall SetitemPrice(int Index, ArrayOfItempricestruct _prop_val)
  {  FitemPrice = _prop_val; FitemPrice_Specified = true;  }
  bool __fastcall itemPrice_Specified(int Index)
  {  return FitemPrice_Specified;  }

public:
  __fastcall ~SellItemStruct();
__published:
  __property __int64        itemId = { read=FitemId, write=FitemId };
  __property UnicodeString  itemTitle = { read=FitemTitle, write=FitemTitle };
  __property UnicodeString itemThumbnailUrl = { read=FitemThumbnailUrl, write=FitemThumbnailUrl };
  __property ArrayOfItempricestruct  itemPrice = { index=(IS_OPTN), read=FitemPrice, write=SetitemPrice, stored = itemPrice_Specified };
  __property int        itemStartQuantity = { read=FitemStartQuantity, write=FitemStartQuantity };
  __property int        itemSoldQuantity = { read=FitemSoldQuantity, write=FitemSoldQuantity };
  __property int        itemQuantityType = { read=FitemQuantityType, write=FitemQuantityType };
  __property __int64    itemStartTime = { read=FitemStartTime, write=FitemStartTime };
  __property __int64    itemEndTime = { read=FitemEndTime, write=FitemEndTime };
  __property UnicodeString itemEndTimeLeft = { read=FitemEndTimeLeft, write=FitemEndTimeLeft };
  __property int        itemBiddersCounter = { read=FitemBiddersCounter, write=FitemBiddersCounter };
  __property UserInfoStruct* itemHighestBidder = { read=FitemHighestBidder, write=FitemHighestBidder };
  __property int        itemCategoryId = { read=FitemCategoryId, write=FitemCategoryId };
  __property int        itemWatchersCounter = { read=FitemWatchersCounter, write=FitemWatchersCounter };
  __property int        itemViewsCounter = { read=FitemViewsCounter, write=FitemViewsCounter };
  __property UnicodeString   itemNote = { read=FitemNote, write=FitemNote };
  __property int        itemSpecialInfo = { read=FitemSpecialInfo, write=FitemSpecialInfo };
  __property int        itemShopInfo = { read=FitemShopInfo, write=FitemShopInfo };
  __property __int64    itemProductInfo = { read=FitemProductInfo, write=FitemProductInfo };
  __property int        itemPayuInfo = { read=FitemPayuInfo, write=FitemPayuInfo };
};

class doGetMySellItemsResponse : public TRemotable {
private:
  int             FsellItemsCounter;
  ArrayOfSellitemstruct FsellItemsList;
  bool            FsellItemsList_Specified;
  void __fastcall SetsellItemsList(int Index, ArrayOfSellitemstruct _prop_val)
  {  FsellItemsList = _prop_val; FsellItemsList_Specified = true;  }
  bool __fastcall sellItemsList_Specified(int Index)
  {  return FsellItemsList_Specified;  }

public:
  __fastcall  doGetMySellItemsResponse();
  __fastcall ~doGetMySellItemsResponse();
__published:
  __property int        sellItemsCounter = { read=FsellItemsCounter, write=FsellItemsCounter };
  __property ArrayOfSellitemstruct sellItemsList = { index=(IS_OPTN), read=FsellItemsList, write=SetsellItemsList, stored = sellItemsList_Specified };
};
 
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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, 21 lipca 2014, 12:22

Nie rozumiem problemu. DynamicArray jest, według dokumentacji VCL, obiektową wersją tablicy, zatem dostęp do jej elementów masz poprzez operator [], czyli:
KOD cpp:     UKRYJ  
FitemPrice[0]->priceValue = 666;
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » sobota, 26 lipca 2014, 08:53

Mam jeszcze problem z dynamiczną tablicą, muszę przekazać dane w formie tablicy jednak wyskakuje błąd

DynArrayOutOfRange



domyślam się że chodzi o to iż nie ma zadeklarowanej ilość rekordów, prosiłbym o pomoc jak to rozwiązać

KOD cpp:     UKRYJ  
class DoGetPostBuyDataRequest : public TRemotable {
private:
  UnicodeString   FsessionHandle;
  ArrayOfLong     FitemsArray;
  bool            FitemsArray_Specified;
  void __fastcall SetitemsArray(int Index, ArrayOfLong _prop_val)
  {  FitemsArray = _prop_val; FitemsArray_Specified = true;  }
  bool __fastcall itemsArray_Specified(int Index)
  {  return FitemsArray_Specified;  }

public:
  __fastcall  DoGetPostBuyDataRequest();
__published:
  __property UnicodeString sessionHandle = { read=FsessionHandle, write=FsessionHandle };
  __property ArrayOfLong itemsArray = { index=(IS_OPTN), read=FitemsArray, write=SetitemsArray, stored = itemsArray_Specified };
};
 


KOD cpp:     UKRYJ  
         DoGetPostBuyDataRequest *klient = new DoGetPostBuyDataRequest();
         doGetPostBuyDataResponse *wynik_klient = new doGetPostBuyDataResponse();

         klient->sessionHandle = sesja;
         __int64 id_klient = wynik_deals->siteJournalDeals[i][0].dealSellerId;

         klient->itemsArray[0] = id_klient;

        wynik_klient = myAllegro->doGetPostBuyData(klient);

        delete klient;
        delete wynik_klient;
 
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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 » sobota, 26 lipca 2014, 10:03

@mate006, czytasz Ty w ogóle dokumentację? Użyj metody set_length.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » środa, 17 września 2014, 14:30

Witam ponownie,

Prosiłbym o pomoc w rozwiązaniu problemu, a mianowicie za pomocą WSDL chciałbym pobrać zamówienie, jednak za każdym razem wyskakuje mi wynik że nie zwrócono żadnych zamówień.

Poniżej mój kod (interesuje mnie obecnie wyszukiwanie po numerze zamówienia):

KOD cpp:     UKRYJ  
void __fastcall TFormularz::Button1Click(TObject *Sender)
{
        requestType *request = new requestType();
        responseType *response = new responseType();

        request->authenticate->system_key = haslo;
        request->authenticate->system_login = login;

        TBoundArray arr;
        arr.set_length(1);

        arr[0] = 41548;

        request->params->orders_sn = arr;

        _di_getOrdersPortType api = GetgetOrdersPortType();

        response = api->getOrders(request);

        ShowMessage(response->errors->faultString );

        delete request;
        delete response;
}

// plik "api_getorders.h"

typedef DynamicArray<int>         ordersSnType;

class paramsType : public TRemotable {
private:
  UnicodeString   Fprepaid_status;
  bool            Fprepaid_status_Specified;
  ordersStatusType Forders_status;
  bool            Forders_status_Specified;
  deliverersType  Fdeliverers;
  bool            Fdeliverers_Specified;
  UnicodeString   Fpayment_type;
  bool            Fpayment_type_Specified;
  ordersIdType    Forders_id;
  bool            Forders_id_Specified;
  ordersSnType    Forders_sn;
  bool            Forders_sn_Specified;
  clientsType     Fclients;
  bool            Fclients_Specified;
  rangeType*      Frange;
  bool            Frange_Specified;
  sourceType*     Fsource;
  bool            Fsource_Specified;
  productsSearchType Fproducts;
  bool            Fproducts_Specified;
  int             Fresults_page;
  bool            Fresults_page_Specified;
  int             Fresults_limit;
  bool            Fresults_limit_Specified;
  UnicodeString   Finvoice_requested;
  bool            Finvoice_requested_Specified;
  packageType*    Fpackages;
  bool            Fpackages_Specified;
  stocksType      Fstocks;
  bool            Fstocks_Specified;
  campaignType*   Fcampaign;
  bool            Fcampaign_Specified;
  loyaltyPointsFlagType Floyalty_points_flag;
  bool            Floyalty_points_flag_Specified;
  void __fastcall Setprepaid_status(int Index, UnicodeString _prop_val)
  {  Fprepaid_status = _prop_val; Fprepaid_status_Specified = true;  }
  bool __fastcall prepaid_status_Specified(int Index)
  {  return Fprepaid_status_Specified;  }
  void __fastcall Setorders_status(int Index, ordersStatusType _prop_val)
  {  Forders_status = _prop_val; Forders_status_Specified = true;  }
  bool __fastcall orders_status_Specified(int Index)
  {  return Forders_status_Specified;  }
  void __fastcall Setdeliverers(int Index, deliverersType _prop_val)
  {  Fdeliverers = _prop_val; Fdeliverers_Specified = true;  }
  bool __fastcall deliverers_Specified(int Index)
  {  return Fdeliverers_Specified;  }
  void __fastcall Setpayment_type(int Index, UnicodeString _prop_val)
  {  Fpayment_type = _prop_val; Fpayment_type_Specified = true;  }
  bool __fastcall payment_type_Specified(int Index)
  {  return Fpayment_type_Specified;  }
  void __fastcall Setorders_id(int Index, ordersIdType _prop_val)
  {  Forders_id = _prop_val; Forders_id_Specified = true;  }
  bool __fastcall orders_id_Specified(int Index)
  {  return Forders_id_Specified;  }
  void __fastcall Setorders_sn(int Index, ordersSnType _prop_val)
  {  Forders_sn = _prop_val; Forders_sn_Specified = true;  }
  bool __fastcall orders_sn_Specified(int Index)
  {  return Forders_sn_Specified;  }
  void __fastcall Setclients(int Index, clientsType _prop_val)
  {  Fclients = _prop_val; Fclients_Specified = true;  }
  bool __fastcall clients_Specified(int Index)
  {  return Fclients_Specified;  }
  void __fastcall Setrange(int Index, rangeType* _prop_val)
  {  Frange = _prop_val; Frange_Specified = true;  }
  bool __fastcall range_Specified(int Index)
  {  return Frange_Specified;  }
  void __fastcall Setsource(int Index, sourceType* _prop_val)
  {  Fsource = _prop_val; Fsource_Specified = true;  }
  bool __fastcall source_Specified(int Index)
  {  return Fsource_Specified;  }
  void __fastcall Setproducts(int Index, productsSearchType _prop_val)
  {  Fproducts = _prop_val; Fproducts_Specified = true;  }
  bool __fastcall products_Specified(int Index)
  {  return Fproducts_Specified;  }
  void __fastcall Setresults_page(int Index, int _prop_val)
  {  Fresults_page = _prop_val; Fresults_page_Specified = true;  }
  bool __fastcall results_page_Specified(int Index)
  {  return Fresults_page_Specified;  }
  void __fastcall Setresults_limit(int Index, int _prop_val)
  {  Fresults_limit = _prop_val; Fresults_limit_Specified = true;  }
  bool __fastcall results_limit_Specified(int Index)
  {  return Fresults_limit_Specified;  }
  void __fastcall Setinvoice_requested(int Index, UnicodeString _prop_val)
  {  Finvoice_requested = _prop_val; Finvoice_requested_Specified = true;  }
  bool __fastcall invoice_requested_Specified(int Index)
  {  return Finvoice_requested_Specified;  }
  void __fastcall Setpackages(int Index, packageType* _prop_val)
  {  Fpackages = _prop_val; Fpackages_Specified = true;  }
  bool __fastcall packages_Specified(int Index)
  {  return Fpackages_Specified;  }
  void __fastcall Setstocks(int Index, stocksType _prop_val)
  {  Fstocks = _prop_val; Fstocks_Specified = true;  }
  bool __fastcall stocks_Specified(int Index)
  {  return Fstocks_Specified;  }
  void __fastcall Setcampaign(int Index, campaignType* _prop_val)
  {  Fcampaign = _prop_val; Fcampaign_Specified = true;  }
  bool __fastcall campaign_Specified(int Index)
  {  return Fcampaign_Specified;  }
  void __fastcall Setloyalty_points_flag(int Index, loyaltyPointsFlagType _prop_val)
  {  Floyalty_points_flag = _prop_val; Floyalty_points_flag_Specified = true;  }
  bool __fastcall loyalty_points_flag_Specified(int Index)
  {  return Floyalty_points_flag_Specified;  }

public:
  __fastcall ~paramsType();
__published:
  __property UnicodeString prepaid_status = { index=(IS_OPTN), read=Fprepaid_status, write=Setprepaid_status, stored = prepaid_status_Specified };
  __property ordersStatusType orders_status = { index=(IS_OPTN), read=Forders_status, write=Setorders_status, stored = orders_status_Specified };
  __property deliverersType deliverers = { index=(IS_OPTN), read=Fdeliverers, write=Setdeliverers, stored = deliverers_Specified };
  __property UnicodeString payment_type = { index=(IS_OPTN), read=Fpayment_type, write=Setpayment_type, stored = payment_type_Specified };
  __property ordersIdType  orders_id = { index=(IS_OPTN), read=Forders_id, write=Setorders_id, stored = orders_id_Specified };
  __property ordersSnType  orders_sn = { index=(IS_OPTN), read=Forders_sn, write=Setorders_sn, stored = orders_sn_Specified };
  __property clientsType    clients = { index=(IS_OPTN), read=Fclients, write=Setclients, stored = clients_Specified };
  __property rangeType*      range = { index=(IS_OPTN), read=Frange, write=Setrange, stored = range_Specified };
  __property sourceType*     source = { index=(IS_OPTN), read=Fsource, write=Setsource, stored = source_Specified };
  __property productsSearchType   products = { index=(IS_OPTN), read=Fproducts, write=Setproducts, stored = products_Specified };
  __property int        results_page = { index=(IS_OPTN), read=Fresults_page, write=Setresults_page, stored = results_page_Specified };
  __property int        results_limit = { index=(IS_OPTN), read=Fresults_limit, write=Setresults_limit, stored = results_limit_Specified };
  __property UnicodeString invoice_requested = { index=(IS_OPTN), read=Finvoice_requested, write=Setinvoice_requested, stored = invoice_requested_Specified };
  __property packageType*   packages = { index=(IS_OPTN), read=Fpackages, write=Setpackages, stored = packages_Specified };
  __property stocksType     stocks = { index=(IS_OPTN), read=Fstocks, write=Setstocks, stored = stocks_Specified };
  __property campaignType*   campaign = { index=(IS_OPTN), read=Fcampaign, write=Setcampaign, stored = campaign_Specified };
  __property loyaltyPointsFlagType loyalty_points_flag = { index=(IS_OPTN), read=Floyalty_points_flag, write=Setloyalty_points_flag, stored = loyalty_points_flag_Specified };
};

class requestType : public TRemotable {
private:
  authenticateType* Fauthenticate;
  paramsType*     Fparams;
  bool            Fparams_Specified;
  void __fastcall Setparams(int Index, paramsType* _prop_val)
  {  Fparams = _prop_val; Fparams_Specified = true;  }
  bool __fastcall params_Specified(int Index)
  {  return Fparams_Specified;  }

public:
  __fastcall requestType();
  __fastcall ~requestType();
__published:
  __property authenticateType* authenticate = { read=Fauthenticate, write=Fauthenticate };
  __property paramsType*     params = { index=(IS_OPTN), read=Fparams, write=Setparams, stored = params_Specified };
};

// plik "api_getorders.cpp"

__fastcall requestType::requestType()
{
  Fauthenticate = new authenticateType;
  Fparams = new paramsType;
}

__fastcall requestType::~requestType()
{
  delete Fauthenticate;
  delete Fparams;
}

 


Sprawa wygląda tak jakby te parametry nie były przekazywane.

Dodam tylko ze za pomocą PHP udaje mi się pobrać dane
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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 polymorphism » czwartek, 18 września 2014, 09:06

Nie wiem, co powoduje błąd, o którym piszesz, ale masz wyciek pamięci:
KOD cpp:     UKRYJ  
responseType *response = new responseType();
...
response = api->getOrders(request); // <--- tutaj gubisz obiekt stworzony powyżej
 


p.s. wrzucaj mniej kodu, ogranicz go tylko do tych fragmentów, które mogą mieć bezpośredni związek z problemem. Teraz większość kodu to definicje i implementacje właściwości (__property).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » wtorek, 3 marca 2015, 15:25

Witam,

Nie mogę dojść do ładu gdzie robię błąd.

Oto kod z WSDL.

service.h
KOD cpp:     UKRYJ  
typedef DynamicArray<FieldsValue*> ArrayOfFieldsvalue;

class DoChangeItemFieldsRequest : public TRemotable {
private:
  ArrayOfFieldsvalue FfieldsToModify;
  bool            FfieldsToModify_Specified;

public:
  __fastcall  DoChangeItemFieldsRequest();
  __fastcall ~DoChangeItemFieldsRequest();
__published:
  __property ArrayOfFieldsvalue fieldsToModify = { index=(IS_OPTN), read=FfieldsToModify, write=SetfieldsToModify, stored = fieldsToModify_Specified };
};
 


service.cpp
KOD cpp:     UKRYJ  
__fastcall DoChangeItemFieldsRequest::DoChangeItemFieldsRequest()
{
        FfieldsToModify.set_length(1);
}

__fastcall DoChangeItemFieldsRequest::~DoChangeItemFieldsRequest()
{
  for(int i=0; i<FfieldsToModify.Length; i++)
        if (FfieldsToModify[i])
          delete FfieldsToModify[i];
  for(int i=0; i<Fvariants.Length; i++)
        if (Fvariants[i])
          delete Fvariants[i];
}
 


Program się kompiluje jednak po kliknięciu w przycisk z kodem

KOD cpp:     UKRYJ  
void __fastcall TEdytor::Button2Click(TObject *Sender)
{
 _di_servicePort myAllegro = GetservicePort();

   DoChangeItemFieldsRequest *item = new DoChangeItemFieldsRequest();
   doChangeItemFieldsResponse *wynik_item = new doChangeItemFieldsResponse();

   item->sessionId = sesja;
   item->itemId = StrToFloat(nr_aukcji->Text);
   item->fieldsToModify.set_length(1);
   item->fieldsToModify[0]->fid = 50;
   item->fieldsToModify[0]->fvalueFloat = 3.94;

   wynik_item = myAllegro->doChangeItemFields(item);

   delete item;
   delete wynik_item;
}
 


Wyskakuje błąd: Access Violation...

I nie wiem gdzie mam to zainicjować.

Prosiłbym o podpowiedź.
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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 polymorphism » wtorek, 3 marca 2015, 15:53

A przy której konkretnie linii wyskakuje błąd AV?


KOD cpp:     UKRYJ  
doChangeItemFieldsResponse *wynik_item = new doChangeItemFieldsResponse(); // (1)
...

wynik_item = myAllegro->doChangeItemFields(item); // (2)

Po co tworzysz obiekt(1) jeśli parę linii później gubisz go(2) nadpisując wskaźnik wynik_item?

p.s. te nawiasy () w linii z new są zbędne.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » środa, 4 marca 2015, 09:32

Błąd wyskakuje podczas przypisania

KOD cpp:     UKRYJ  
item->fieldsToModify[0]->fid = 50;


Co do twojej uwagi to raczej przypisuje niż nadpisuje. I o dziwo działa :)
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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 polymorphism » środa, 4 marca 2015, 10:36

Ech, panie mate006, widzę, że ktoś tu wskaźników nie umie. Oczywiście, że działa, ale masz wyciek pamięci. Specjalnie użyłem słowa "nadpisuje", żebyś zrozumiał, co tym niewinnym przypisaniem robisz.

Co do głównego błędu: FfieldsToModify jest tablicą wskaźników. Tworząc pole w tej tablicy, np. w konstruktorze, nie tworzysz automatycznie obiektu, na który to pole wskazuje. Stąd ten błąd dostępu do pamięci.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Access violation podczas przekazywania parametrów dla WSDL

Nowy postprzez mate006 » środa, 4 marca 2015, 12:25

W 95% jestem samoukiem więc nie ma się co dziwić, radzę sobie jak mogę:) Mógłbyś mi coś więcej powiedzieć o tym tworzeniu wskaźników w konstruktorze?
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
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

Nastę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ść