|
@@ -395,7 +395,7 @@ type
|
|
const AOffset : PtrUInt;
|
|
const AOffset : PtrUInt;
|
|
const AValue : TSDOVariant
|
|
const AValue : TSDOVariant
|
|
); override;
|
|
); override;
|
|
-
|
|
|
|
|
|
+
|
|
function getBoolean(
|
|
function getBoolean(
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const AOffset : PtrUInt
|
|
const AOffset : PtrUInt
|
|
@@ -565,7 +565,7 @@ type
|
|
const AOffset : PtrUInt;
|
|
const AOffset : PtrUInt;
|
|
const AValue : TSDOVariant
|
|
const AValue : TSDOVariant
|
|
); override;
|
|
); override;
|
|
-
|
|
|
|
|
|
+
|
|
function getBoolean(
|
|
function getBoolean(
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const AOffset : PtrUInt
|
|
const AOffset : PtrUInt
|
|
@@ -670,6 +670,15 @@ type
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const AOffset : PtrUInt
|
|
const AOffset : PtrUInt
|
|
);override;
|
|
);override;
|
|
|
|
+ function getVariant(
|
|
|
|
+ const ABuffer : TSDOFieldBuffer;
|
|
|
|
+ const AOffset : PtrUInt
|
|
|
|
+ ) : TSDOVariant; override;
|
|
|
|
+ procedure setVariant(
|
|
|
|
+ const ABuffer : TSDOFieldBuffer;
|
|
|
|
+ const AOffset : PtrUInt;
|
|
|
|
+ const AValue : TSDOVariant
|
|
|
|
+ ); override;
|
|
end;
|
|
end;
|
|
|
|
|
|
TSDOChangeSummaryField = class(TSDOBaseField,IInterface,ISDOField)
|
|
TSDOChangeSummaryField = class(TSDOBaseField,IInterface,ISDOField)
|
|
@@ -706,7 +715,7 @@ type
|
|
const AOffset : PtrUInt;
|
|
const AOffset : PtrUInt;
|
|
const AValue : TSDOVariant
|
|
const AValue : TSDOVariant
|
|
); override;
|
|
); override;
|
|
-
|
|
|
|
|
|
+
|
|
function getBoolean(
|
|
function getBoolean(
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const AOffset : PtrUInt
|
|
const AOffset : PtrUInt
|
|
@@ -793,7 +802,7 @@ type
|
|
const AOffset : PtrUInt;
|
|
const AOffset : PtrUInt;
|
|
const AValue : TSDOVariant
|
|
const AValue : TSDOVariant
|
|
); override;
|
|
); override;
|
|
-
|
|
|
|
|
|
+
|
|
function getBytes(
|
|
function getBytes(
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const AOffset : PtrUInt
|
|
const AOffset : PtrUInt
|
|
@@ -1836,7 +1845,7 @@ procedure TSDOBooleanField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setBoolean(ABuffer,AOffset,AValue);
|
|
setBoolean(ABuffer,AOffset,AValue);
|
|
@@ -1995,7 +2004,7 @@ procedure TSDOIntegerField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setInteger(ABuffer,AOffset,AValue);
|
|
setInteger(ABuffer,AOffset,AValue);
|
|
@@ -2200,7 +2209,7 @@ procedure TSDOBaseStringField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setString(ABuffer,AOffset,AValue);
|
|
setString(ABuffer,AOffset,AValue);
|
|
@@ -2264,6 +2273,17 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TSDOObjectField.getVariant(
|
|
|
|
+ const ABuffer: TSDOFieldBuffer;
|
|
|
|
+ const AOffset: PtrUInt
|
|
|
|
+) : TSDOVariant;
|
|
|
|
+begin
|
|
|
|
+ if isNull(ABuffer,AOffset) then
|
|
|
|
+ Result := Null
|
|
|
|
+ else
|
|
|
|
+ Result := getDataObject(ABuffer,AOffset);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TSDOObjectField.setDataObject(
|
|
procedure TSDOObjectField.setDataObject(
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const ABuffer : TSDOFieldBuffer;
|
|
const AOffset : PtrUInt;
|
|
const AOffset : PtrUInt;
|
|
@@ -2292,6 +2312,31 @@ begin
|
|
objBuffer^^ := AValue;
|
|
objBuffer^^ := AValue;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TSDOObjectField.setVariant(
|
|
|
|
+ const ABuffer : TSDOFieldBuffer;
|
|
|
|
+ const AOffset : PtrUInt;
|
|
|
|
+ const AValue : TSDOVariant
|
|
|
|
+);
|
|
|
|
+var
|
|
|
|
+ x : IInterface;
|
|
|
|
+ obj : ISDODataObject;
|
|
|
|
+begin
|
|
|
|
+ if VarIsNull(AValue) then begin
|
|
|
|
+ setNull(ABuffer,AOffset);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ if not VarIsType(AValue,varUnknown) then
|
|
|
|
+ raise ESDOInvalidConversionException.Create(ClassName);
|
|
|
|
+ x := AValue;
|
|
|
|
+ if (x = nil) then begin
|
|
|
|
+ obj := nil;
|
|
|
|
+ end else begin
|
|
|
|
+ if not Supports(x,ISDODataObject,obj) then
|
|
|
|
+ raise ESDOInvalidConversionException.Create(ClassName);
|
|
|
|
+ end;
|
|
|
|
+ setDataObject(ABuffer,AOffset,obj);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TSDOObjectField.setNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
|
|
procedure TSDOObjectField.setNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
|
|
var
|
|
var
|
|
rawBuffer : PByte;
|
|
rawBuffer : PByte;
|
|
@@ -2580,7 +2625,7 @@ procedure TSDOByteField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setByte(ABuffer,AOffset,AValue);
|
|
setByte(ABuffer,AOffset,AValue);
|
|
@@ -2658,10 +2703,10 @@ procedure TSDODateField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
- setDate(ABuffer,AOffset,DateTimeToDateTimeRec(AValue));
|
|
|
|
|
|
+ setDate(ABuffer,AOffset,DateTimeToDateTimeRec(VarToDateTime(AValue)));
|
|
end;
|
|
end;
|
|
|
|
|
|
{ TSDOCharField }
|
|
{ TSDOCharField }
|
|
@@ -2910,16 +2955,11 @@ procedure TSDOCharField.setVariant(
|
|
const AOffset: PtrUInt;
|
|
const AOffset: PtrUInt;
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
-var
|
|
|
|
- locStr : TSDOString;
|
|
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then begin
|
|
|
|
|
|
+ if VarIsNull(AValue) then begin
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
end else begin
|
|
end else begin
|
|
- locStr := AValue;
|
|
|
|
- if IsStrEmpty(locStr) then
|
|
|
|
- locStr := #0;
|
|
|
|
- setCharacter(ABuffer,AOffset,locStr[1]);
|
|
|
|
|
|
+ setCharacter(ABuffer,AOffset,AValue);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -3080,7 +3120,7 @@ procedure TSDOLongField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setLong(ABuffer,AOffset,AValue);
|
|
setLong(ABuffer,AOffset,AValue);
|
|
@@ -3245,7 +3285,7 @@ procedure TSDOShortField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setShort(ABuffer,AOffset,AValue);
|
|
setShort(ABuffer,AOffset,AValue);
|
|
@@ -3562,11 +3602,25 @@ procedure TSDOBytesField.setVariant(
|
|
const AOffset: PtrUInt;
|
|
const AOffset: PtrUInt;
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
|
|
+var
|
|
|
|
+ tempValue : TSDOBytes;
|
|
|
|
+ i, c : Integer;
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) or VarIsEmpty(AValue) then begin
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
- else
|
|
|
|
- setBytes(ABuffer,AOffset,AValue);
|
|
|
|
|
|
+ end else begin
|
|
|
|
+ if not VarIsArray(AValue) then
|
|
|
|
+ raise ESDOInvalidConversionException.Create(ClassName);
|
|
|
|
+ c := VarArrayHighBound(AValue,1) - VarArrayLowBound(AValue,1) + 1;
|
|
|
|
+ if (c > 0) then begin
|
|
|
|
+ SetLength(tempValue,c);
|
|
|
|
+ for i := VarArrayLowBound(AValue,1) to VarArrayHighBound(AValue,1) do
|
|
|
|
+ tempValue[i] := AValue[i];
|
|
|
|
+ end else begin
|
|
|
|
+ tempValue := nil;
|
|
|
|
+ end;
|
|
|
|
+ setBytes(ABuffer,AOffset,tempValue);
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TSDOCurrencyField.getVariant(
|
|
function TSDOCurrencyField.getVariant(
|
|
@@ -3586,7 +3640,7 @@ procedure TSDOCurrencyField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setCurrency(ABuffer,AOffset,AValue);
|
|
setCurrency(ABuffer,AOffset,AValue);
|
|
@@ -3609,7 +3663,7 @@ procedure TSDODoubleField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setDouble(ABuffer,AOffset,AValue);
|
|
setDouble(ABuffer,AOffset,AValue);
|
|
@@ -3632,7 +3686,7 @@ procedure TSDOFloatField.setVariant(
|
|
const AValue: TSDOVariant
|
|
const AValue: TSDOVariant
|
|
);
|
|
);
|
|
begin
|
|
begin
|
|
- if isNull(ABuffer,AOffset) then
|
|
|
|
|
|
+ if VarIsNull(AValue) then
|
|
setNull(ABuffer,AOffset)
|
|
setNull(ABuffer,AOffset)
|
|
else
|
|
else
|
|
setFloat(ABuffer,AOffset,AValue);
|
|
setFloat(ABuffer,AOffset,AValue);
|
|
@@ -3643,5 +3697,6 @@ initialization
|
|
|
|
|
|
finalization
|
|
finalization
|
|
UnprepareMap();
|
|
UnprepareMap();
|
|
-
|
|
|
|
|
|
+
|
|
end.
|
|
end.
|
|
|
|
+
|