// C# 소스 코드
private static TrackRequest CreateTrackRequest()
{
TrackRequest request = new TrackRequest();
request.WebAuthenticationDetail = new WebAuthenticationDetail();
request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential();
request.WebAuthenticationDetail.UserCredential.Key = "CiX2k8x1RtuMwcds";
request.ClientDetail = new ClientDetail();
request.ClientDetail.AccountNumber = "510387348";
request.ClientDetail.MeterNumber = "107531677";
request.TransactionDetail = new TransactionDetail();
request.TransactionDetail.CustomerTransactionId = "Track Request...";
request.Version = new VersionId();
request.SelectionDetails = new TrackSelectionDetail[1] { new TrackSelectionDetail() };
request.SelectionDetails[0].PackageIdentifier = new TrackPackageIdentifier();
request.SelectionDetai
ls[0].PackageIdentifier.Value = "XXX";
request.SelectionDetails[0].PackageIdentifier.Type = TrackIdentifierType.TRACKING_NUMBER_OR_DOORTAG;
return request;
}
// 전환된 델파이 코드
procedure TForm1.btnTrackClick(Sender: TObject);
var
rTrackRequest: TrackRequest;
rTrackReply: TrackReply;
rTrackDetail: TrackSelectionDetail;
begin
rTrackRequest := TrackRequest.Create;
rTrackReply := TrackReply.Create;
rTrackRequest.WebAuthenticationDetail := WebAuthenticationDetail.Create;
rTrackRequest.WebAuthenticationDetail.UserCredential := webAuthenticationCredential.Create;
rTrackRequest.WebAuthenticationDetail.UserCredential.Key := 'CiX2k8x1RtuMwcds';
rtrackRequest.ClientDetail := ClientDetail.Create;
rTrackRequest.ClientDetail.AccountNumber := '510387348';
rTrackRequest.ClientDetail.MeterNumber := '107531677';
rTrackRequest.TransactionDetail := TransactionDetail.Create;
rTrackRequest.TransactionDetail.CustomerTransactionId := 'Track Request...';
rTrackRequest.Version := VersionID.Create;
rTrackRequest.SelectionDetails[0] := TrackSelectionDetail.Create; // Access violation 에러가 나옴
rTrackRequest.SelectionDetails[0].PackageIdentifier := TrackPackageIdentifier.Create;
rTrackRequest.SelectionDetails[0].PackageIdentifier.Value := fldTrackNo.Text;
rTrackRequest.SelectionDetails[0].PackageIdentifier.Type_ := TrackIdentifierType.TRACKING_NUMBER_OR_DOORTAG;
rTrackReply := (FedEx as TrackPortType).track(rTrackRequest);
end;