我相当新的德尔福&必须编写一个SOAP客户端。导入WSDL生成的代码(我明明是我显然必须符合服务器端无法更改)德尔福7:访问冲突 - TByteDynArray问题
DataPart = class;
Message = class;
eMessage = class;
eventType = (send, delete, etc);
DataPart = class(TRemotable)
private
FhasData: Boolean;
Fdata: TByteDynArray;
published
property hasData: Boolean read FhasData write FhasData;
property data: TByteDynArray read Fdata write Fdata;
end;
Message = class(TRemotable)
private
FMessageID: Int64;
Ftimestamp: TXSDateTime;
Fevent: eventType;
FmagicNumber: WideString;
FDataPart: DataPart;
published
property MessageID: Int64 read FMessageID write FMessageID;
property timestamp: TXSDateTime read Ftimestamp write Ftimestamp;
property event: eventType read Fevent write Fevent;
property magicNumber: WideString read FmagicNumber write FmagicNumber;
property DataPart: DataPart read FDataPart write FDataPart;
end;
eMessage = class(TRemotable)
private
FencryptedMessage: TByteDynArray;
Fdata: DataPart;
published
property encryptedMessage: TByteDynArray read FencryptedMessage write FencryptedMessage;
property data: DataPart read Fdata write Fdata;
end;
MyApplicationPortType = interface(IInvokable)
['{99767D33-6B4A-7547-4DAC-0608095CAC70}']
function sendMessage(const encryptedMessage: TByteDynArray; const data: DataPart): WideString; stdcall;
end;
任何人都可以编写我的虚拟值)的一个例子,将调用的sendMessage(而不是原因访问违规?我真的不知道如何处理TByteDynArray
[编辑]的要求,这里是我的代码,但 - 免责声明 - 我不得不破解它讲了很多(酌减)发布之前,所以它可能不会编译。双方PARMS到的sendMessage()非空
var theMessageArray: TByteDynArray;
theResult : WideString;
messageData : TByteDynArray;
i : Integer;
begin
theMessage.messageID := theMessage.messageID + 1;
theMessage.timestamp := TXSDateTime.Create();
theMessage.timestamp.AsDateTime := Now();
theMessage.event := delete;
theMessage.magicNumber := 'magiC# ' + IntToStr(theMessage.messageID);
SetLength(messageData, 1);
messageData[0] := 0;
theMessage.dataPart.hasData := True;
messageData := theMessage.dataPart.messageData;
SetLength(messageData, $1000 * dataSize);
for i := 0 to $1000 * dataSize - 1 do
messageData[i] := i and $FF;
theMessage.DataPart.messageData := messageData;
theMessageArray := TByteDynArray(theMessage);
theResult := (HTTPRIO1 as MyApplicationPortType).sendMessage(theMessageArray, theMessage.dataPart);
这只是一个接口。你在做什么导致访问违规? – 2010-07-01 12:37:40
+1是一个很好的问题。有两种方法可以解决这个问题 - 向我展示我的代码和数字为什么不起作用,或者有人发布了一些可以工作的代码,我可以将它与我自己的代码进行比较。好的,我会发布我的代码,但重要的是(我认为)这两个参数在调用时都是非空的 – Mawg 2010-07-01 13:17:02
你真的从抢夺胜利的口袋中抢走了胜利,因为你使用了TByteDynArray而不是TBytes(这真的是只是一个字符串)。 – 2010-07-01 13:36:20