Не могу обойти Ошибку! Прошу помочь!
WindowsXP
Пишу клиента для тестирования сервера. Сделал импорт wsdl. Все работает. Но когда пытаюсь ввести значения для Vendors, идет ошибка.
Даю на просмотр h-file, connect-file и файл обращения к службе.
HEADER-FILE/////////////////////////////////////////////////////////////////////////
namespace NS_MXService {
class SOAP_REMOTABLE_CLASS Items;
class SOAP_REMOTABLE_CLASS Item;
class SOAP_REMOTABLE_CLASS Vendors;
typedef DynamicArray<WideString*> Array_Of_string;//
class Items : public TRemotable {
private:
Item* FItem;
public:
__fastcall ~Items();
__published:
__property Item* Item = { read=FItem, write=FItem };
};
class Item : public TRemotable {
private:
UnicodeString FOrgID;
UnicodeString FSiteID;
UnicodeString FItemID;
double FEstPrice;
UnicodeString FName;
UnicodeString FModelType;
UnicodeString FTechDet;
UnicodeString FDisabled;
Vendors* FVendors;
UnicodeString FStatus;
public:
__fastcall ~Item();
__published:
__property UnicodeString OrgID = { read=FOrgID, write=FOrgID };
__property UnicodeString SiteID = { read=FSiteID, write=FSiteID };
__property UnicodeString ItemID = { read=FItemID, write=FItemID };
__property double EstPrice = { read=FEstPrice, write=FEstPrice };
__property UnicodeString Name = { read=FName, write=FName };
__property UnicodeString ModelType = { read=FModelType, write=FModelType };
__property UnicodeString TechDet = { read=FTechDet, write=FTechDet };
__property UnicodeString Disabled = { read=FDisabled, write=FDisabled };
__property Vendors* Vendors = { read=FVendors, write=FVendors };
__property UnicodeString Status = { read=FStatus, write=FStatus };
};
class Vendors : public TRemotable {
private:
Array_Of_string FVendorID;
__published:
__property Array_Of_string VendorID = { read=FVendorID, write=FVendorID };
};
// ************************************************************************ //
// Namespace : Maximo
// soapAction: Maximo#%operationName%
// transport :
http://schemas.xmlsoap.org/soap/http
// style : rpc
// binding : MXServicebinding
// service : MXServiceservice
// port : MXServicePort
// URL :
http://localhost/C_Server/C_Cerv_1.exe/soap/MXService
// ************************************************************************ //
__interface INTERFACE_UUID("{1FB60718-9912-371B-4DD5-3D173765D65E}") MXService : public IInvokable
{
public:
virtual void CreateMaterialTrans(const PurchaseRequisitions PurchaseRequisitions) = 0;
virtual void UpdatePRMatAvailability(const PurchaseRequisitions2* PurchaseRequisitions) = 0;
virtual void SyncCompanies(const Companies Companies) = 0;
virtual void SyncItems(const Items* Items) = 0;
virtual void UpdateInvBalances(const InvBalances* InvBalances) = 0;
};
typedef DelphiInterface<MXService> _di_MXService;
_di_MXService GetMXService(bool useWSDL=false, AnsiString addr="", THTTPRIO* HTTPRIO=0);
}; // NS_MXService
#if !defined(NO_IMPLICIT_NAMESPACE_USE)
using namespace NS_MXService;
#endif
HEADER-FILE///////////////////////////////////////////////////////////////////////// END
CONNECT-FILE////////////////////////////////////////////////
#include <vcl.h>
#pragma hdrstop
#if !defined(MXServiceH)
#include "MXService.h"
#endif
namespace NS_MXService {
_di_MXService GetMXService(bool useWSDL, AnsiString addr, THTTPRIO* HTTPRIO)
{
static const char* defWSDL= "
http://localhost/C_Server/C_Cerv_1.exe/wsdl/MXService";
static const char* defURL = "
http://localhost/C_Server/C_Cerv_1.exe/soap/MXService";
static const char* defSvc = "MXServiceservice";
static const char* defPrt = "MXServicePort";
if (addr=="")
addr = useWSDL ? defWSDL : defURL;
THTTPRIO* rio = HTTPRIO ? HTTPRIO : new THTTPRIO(0);
if (useWSDL) {
rio->WSDLLocation = addr;
rio->Service = defSvc;
rio->Port = defPrt;
} else {
rio->URL = addr;
}
_di_MXService service;
rio->QueryInterface(service);
if (!service && !HTTPRIO)
delete rio;
return service;
}
__fastcall Items::~Items()
{
delete FItem;
}
__fastcall Item::~Item()
{
delete FVendors;
}
// ************************************************************************ //
// This routine registers the interfaces and types exposed by the WebService.
// ************************************************************************ //
static void RegTypes()
{
/* MXService */
InvRegistry()->RegisterInterface(__delphirtti(MXService), L"Maximo", L"");
InvRegistry()->RegisterDefaultSOAPAction(__delphirtti(MXService), L"Maximo#%operationName%");
/*Array_Of_string*/
RemClassRegistry()->RegisterXSInfo(__delphirtti(Array_Of_string), L"Maximo", L"Array_Of_string");
/* Items */
RemClassRegistry()->RegisterXSClass(__classid(Items), L"Maximo", L"Items");
/* Item */
RemClassRegistry()->RegisterXSClass(__classid(Item), L"Maximo", L"Item");
/* Vendors */
RemClassRegistry()->RegisterXSClass(__classid(Vendors), L"Maximo", L"Vendors");
}
#pragma startup RegTypes 32
}; // NS_MXService
CONNECT-FILE//////////////////////////////////////////////// END
КНОПКА ВЫЗОВА///////////////////////////////////////////////////////
void __fastcall TForm3::Button1Click(TObject *Sender)
{
Items* bugy2 = new (sizeof (Items)) Items;
bugy2->Item = new (sizeof (Items) * 4)Item;
bugy2->Item->Vendors = new Vendors;
bugy2->Item->Vendors->VendorID.set_length(2);
bugy2->Item->Vendors->VendorID.operator [](0) = (WideString*)"ss";
bugy2->Item->Vendors->VendorID.operator [](1) = (WideString*)"ggggggg";
GetMXService()->SyncItems(bugy2);// здесь ошибка в rtl120.bpl – access violation l!!!!!!!!!!!!!!!!!!!! В GetMXService() — ошибка на выходе из функции.
delete bugy2;
Вроде бы все по науке. Не знаю что делать.