Использование Delphi Self-Pointer

Мне нужно получить указатель на экземпляр моего класса внутри этого экземпляра. Я не могу использовать "Self" напрямую, мне нужен указатель на хранилище для будущего использования. Я попробовал следующий код:

type
    TTest = class(TObject)
    public
        class function getClassPointer: Pointer;
        function getSelfPointer: Pointer;
    end;

class function TTest.getClassPointer: Pointer;
begin
    Result := Pointer(Self);
end;

function TTest.getSelfPointer: Pointer;
begin
    Result := Pointer(Self);
end;

И оба результата неверны - этот код:

test := TTest.Create;
Writeln('Actual object address: ', IntToHex(Integer(@test), 8));
Writeln('Class "Self" value: ', IntToHex(Integer(test.getClassPointer()), 8));
Writeln('Object "Self" value: ', IntToHex(Integer(test.getSelfPointer()), 8));

возвращает:

Actual object address:    00416E6C
Class "Self" value:       0040E55C
Object "Self" value:      01EE0D10

Пожалуйста, помогите мне понять, что это за значение «Self»? Является ли "Self" указателем на этот экземпляр класса? Как использовать этот указатель для будущего использования вне этого объекта? Как получить правильный указатель из этого значения?

5
задан Matt 2 July 2013 в 20:48
поделиться