XE2 WebServices变量申请后不能用,D6可以
报错代码:raised exception class $C0000005 with message 'access violation at 0x004cc1f6: read of address 0x180012f3'.下面是引入的WDSL单位.
unit GetOrdersService;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type Materiel = class;
Materiel = class(TRemotable)
private
Fimage: TByteDynArray;
FimageName: string;
FmaterielName: string;
Fnumber: Double;
Fprice: Double;
Fuid: string;
published
property image: TByteDynArray read Fimage write Fimage;
property imageName: string read FimageName write FimageName;
property materielName: string read FmaterielName write FmaterielName;
property number: Double read Fnumber write Fnumber;
property price: Double read Fprice write Fprice;
property uid: string read Fuid write Fuid;
end; GetOrdersServiceImpl = interface(IInvokable)
['{28E2C1A5-4D71-7278-C81B-6B2E93EBD77B}']
function downloadOrders(const company: string): string; stdcall;
function uploadMateriels(const materiels: Materiel): Boolean; stdcall;
end;function GetGetOrdersServiceImpl(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): GetOrdersServiceImpl;implementation
uses SysUtils;function GetGetOrdersServiceImpl(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): GetOrdersServiceImpl;
const
defWSDL = 'http://192.168.0.243:8080/saas/services/GetOrdersService?wsdl';
defURL = 'http://192.168.0.243:8080/saas/services/GetOrdersService';
defSvc = 'GetOrdersServiceImplService';
defPrt = 'GetOrdersService';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as GetOrdersServiceImpl);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;initialization
{ GetOrdersServiceImpl }
InvRegistry.RegisterInterface(TypeInfo(GetOrdersServiceImpl), 'http://impl.service.government.com.sasp', 'UTF-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(GetOrdersServiceImpl), '');
RemClassRegistry.RegisterXSClass(Materiel, 'http://biz.orm.sasp', 'Materiel');end.程序,按钮单击事件.procedure TMainFrm.Button10Click(Sender: TObject);
var
ss:Materiel;
begin
ss.uid:='300'; //这里就报错了
ss.price:=105.33;
if (HTTPRIO1 as GetOrdersServiceImpl).uploadMateriels(ss) then
ShowMessage('Sucess!')
else
ShowMessage('False!');
end;下面是报错代码:
raised exception class $C0000005 with message 'access violation at 0x004cc1f6: read of address 0x180012f3'.
报错代码:raised exception class $C0000005 with message 'access violation at 0x004cc1f6: read of address 0x180012f3'.下面是引入的WDSL单位.
unit GetOrdersService;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type Materiel = class;
Materiel = class(TRemotable)
private
Fimage: TByteDynArray;
FimageName: string;
FmaterielName: string;
Fnumber: Double;
Fprice: Double;
Fuid: string;
published
property image: TByteDynArray read Fimage write Fimage;
property imageName: string read FimageName write FimageName;
property materielName: string read FmaterielName write FmaterielName;
property number: Double read Fnumber write Fnumber;
property price: Double read Fprice write Fprice;
property uid: string read Fuid write Fuid;
end; GetOrdersServiceImpl = interface(IInvokable)
['{28E2C1A5-4D71-7278-C81B-6B2E93EBD77B}']
function downloadOrders(const company: string): string; stdcall;
function uploadMateriels(const materiels: Materiel): Boolean; stdcall;
end;function GetGetOrdersServiceImpl(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): GetOrdersServiceImpl;implementation
uses SysUtils;function GetGetOrdersServiceImpl(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): GetOrdersServiceImpl;
const
defWSDL = 'http://192.168.0.243:8080/saas/services/GetOrdersService?wsdl';
defURL = 'http://192.168.0.243:8080/saas/services/GetOrdersService';
defSvc = 'GetOrdersServiceImplService';
defPrt = 'GetOrdersService';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as GetOrdersServiceImpl);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;initialization
{ GetOrdersServiceImpl }
InvRegistry.RegisterInterface(TypeInfo(GetOrdersServiceImpl), 'http://impl.service.government.com.sasp', 'UTF-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(GetOrdersServiceImpl), '');
RemClassRegistry.RegisterXSClass(Materiel, 'http://biz.orm.sasp', 'Materiel');end.程序,按钮单击事件.procedure TMainFrm.Button10Click(Sender: TObject);
var
ss:Materiel;
begin
ss.uid:='300'; //这里就报错了
ss.price:=105.33;
if (HTTPRIO1 as GetOrdersServiceImpl).uploadMateriels(ss) then
ShowMessage('Sucess!')
else
ShowMessage('False!');
end;下面是报错代码:
raised exception class $C0000005 with message 'access violation at 0x004cc1f6: read of address 0x180012f3'.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货