type
Troomstatus = record
wCode: Word;
bType: byte;
bStatus: byte;
end; Troominfo = record
RoomCount: Word;
RoomInfoSize: byte;
aRoom: array of Troomstatus;//设置成静态数组的话转换没有问题
end;
end;
var
vv:variant;
function RecordToVariant(roomInfo: Troominfo): OleVariant;
var
P: Pointer;
iByteCount: Word;
begin
iByteCount := SizeOf(roomInfo.RoomCount) + SizeOf(roomInfo.RoomInfoSize) + roomInfo.RoomCount * roomInfo.RoomInfoSize;
Result := VarArrayCreate([0, iByteCount - 1], varByte);
P := VarArrayLock(Result);
Move(roomInfo, P^, iByteCount);
VarArrayUnlock(Result);
end;function VariantToRecord(value: olevariant): Troominfo;
var
P: Pointer;
iByteCount: word;
RoomCount: byte;
RoomInfoSize: byte;
i: Word;
aa: array of char;
begin
P := VarArrayLock(value);
{ Move(P^, result, sizeof(result.RoomCount) + sizeof(result.RoomInfoSize));
RoomCount := result.RoomCount;
RoomInfoSize := result.RoomInfoSize;
iByteCount := SizeOf(result.RoomCount) + SizeOf(result.RoomInfoSize) + result.RoomCount * result.RoomInfoSize;
//SetLength(result.aRoom, RoomCount);}
Move(P^, result, iByteCount);
VarArrayUnlock(value);
end;
我的函数静态数组的转换没有问题,
请问如何实现变体类型到记录类型的转换?
Troomstatus = record
wCode: Word;
bType: byte;
bStatus: byte;
end; Troominfo = record
RoomCount: Word;
RoomInfoSize: byte;
aRoom: array of Troomstatus;//设置成静态数组的话转换没有问题
end;
end;
var
vv:variant;
function RecordToVariant(roomInfo: Troominfo): OleVariant;
var
P: Pointer;
iByteCount: Word;
begin
iByteCount := SizeOf(roomInfo.RoomCount) + SizeOf(roomInfo.RoomInfoSize) + roomInfo.RoomCount * roomInfo.RoomInfoSize;
Result := VarArrayCreate([0, iByteCount - 1], varByte);
P := VarArrayLock(Result);
Move(roomInfo, P^, iByteCount);
VarArrayUnlock(Result);
end;function VariantToRecord(value: olevariant): Troominfo;
var
P: Pointer;
iByteCount: word;
RoomCount: byte;
RoomInfoSize: byte;
i: Word;
aa: array of char;
begin
P := VarArrayLock(value);
{ Move(P^, result, sizeof(result.RoomCount) + sizeof(result.RoomInfoSize));
RoomCount := result.RoomCount;
RoomInfoSize := result.RoomInfoSize;
iByteCount := SizeOf(result.RoomCount) + SizeOf(result.RoomInfoSize) + result.RoomCount * result.RoomInfoSize;
//SetLength(result.aRoom, RoomCount);}
Move(P^, result, iByteCount);
VarArrayUnlock(value);
end;
我的函数静态数组的转换没有问题,
请问如何实现变体类型到记录类型的转换?
这是例子,XMLDocument有很多方法的,仔细看看
var root, fileXN, xn, cdataNode: IXMLNode;
begin
XMLDocument := CreateOLEObject('MSXML2.DOMDocument');
root := XMLDocument.AddChild('root');
fileXN := root.AddChild('file');
cdataNode := XMLDocument.CreateNode('content', ntCData);
xn := fileXN.AddChild('content');
cdataNode.NodeValue := 'sjfsjadfjsdjfasdjfsiewuorwqiu<>><><><';
xn.DOMNode.appendChild(cdataNode.DOMNode);
end;
全部使用delphi自带的控件,不需要再定义系统组件