Чтобы лучше объяснить, чего я пытаюсь достичь, я собираюсь начать с чего-то, что работает.
Скажем, у нас есть процедура, которая может вызвать другую процедуру и передать ей строковый параметр:
procedure CallSaySomething(AProc: Pointer; const AValue: string);
var
LAddr: Integer;
begin
LAddr := Integer(PChar(AValue));
asm
MOV EAX, LAddr
CALL AProc;
end;
end;
Это процедура, которую мы будем называть:
procedure SaySomething(const AValue: string);
begin
ShowMessage( AValue );
end;
Теперь я могу позвонить SaySomething примерно так (проверено и работает (:):
CallSaySomething(@SaySomething, 'Morning people!');
У меня вопрос, как мне добиться подобной функциональности, но на этот раз SaySomething должен быть метод :
type
TMyObj = class
public
procedure SaySomething(const AValue: string); // calls show message by passing AValue
end;
итак, если вы все еще со мной ..., моя цель - перейти к процедуре, похожей на:
procedure CallMyObj(AObjInstance, AObjMethod: Pointer; const AValue: string);
begin
asm
// here is where I need help...
end;
end;
Я сделал несколько снимков, но мои знания по сборке ограничены.