Mit SizeOf klappts. Habs jetzt mal wie folgt gemacht und es scheint zu funktionieren, egal wieviel Platz die Menge benötigt (1 - 32 Byte).
Delphi-Quellcode:
function MySizeOf(
var Menge: TMySet): Byte;
function CountBits(C: Byte; P: Pointer): Byte;
asm
MOV CL, AL
// Byteanzahl nach CL
MOV EAX, 0
// Bitzähler EAX initialisieren
@loop1:
MOV EBX, [EDX]
// Bits nach EBX laden
MOV CH, 8
// Bitanzahl nach CH
@loop2:
ROR EBX, 1
// Niedrigstes Bit von EBX nach CF schieben
JNC @nocarry
ADD EAX, 1
// CF gesetzt? Dann EAX inkrementieren
@nocarry:
DEC CH
JNZ @loop2
ADD EDX, 1
// nächstes Bit adressieren
DEC CL
JNZ @loop1
end;
begin
MySizeOf := CountBits(SizeOf(Menge), @Menge);
end;
Gruß,
Lucas