Procedure type передать через тип OleVariant

HOME_X
Дата: 10.10.2019 23:21:37
Доброго дня господа !

Возможно ли описанный процедурный тип передать через тип OleVariant
Знаю прием применительно к простому классу, но хотел бы использовать процедурный тип

type 
   TObjProc = Procedure(Sender: object): of object;

var 
   MyObj:  TObjProc;
   result := OleVariant(Integer(MyObj));

var
  aInt: Integer;
  MyObj: TObjProc;
begin
  aInt := result;
  MyObj := TObjProc(aInt);
end;

Спасибо
white_nigger
Дата: 10.10.2019 23:52:17
Зачем?
X-Cite
Дата: 11.10.2019 09:22:20
Почему именно олевариант? Как обычная переменная не покатит?
Василий 2
Дата: 11.10.2019 10:26:22
Процедура - просто указатель, приводи к Pointer и передавай
ziv-2014
Дата: 11.10.2019 10:32:52
HOME_X,
В помощь тебе TVarData.
alekcvp
Дата: 11.10.2019 10:38:44
white_nigger
Зачем?

Вангую, что он её куда-нибудь в VBScript хочет передать...
Кроик Семён
Дата: 11.10.2019 11:27:42
HOME_X,

я подобный код никогда не писал (не было надобности), сейчас фантазирую, но думаю правильно

итак, вот нашлось: статья в интернете

и анализируя код примера из статьи, получается следующее:

type 
   TObjProc = Procedure(Sender: object): of object;
   PObjProc = ^TObjProc;

// TMethod = record Code, Data: Pointer; end;

var
   recMethod    : TMethod;  
   ObjProc      : TObjProc;
   pObjProc     : PObjProc;
   pSelf        : TObject;
begin
   ObjProc := .....
   
   recMethod := TMethod(ObjProc);
   
   pObjProc := PObjProc(recMethod.Code);
   pSelf := TObject(recMethod.Data);


а вот что с этим делать дальше, может другие подскажут
Кроик Семён
Дата: 11.10.2019 11:30:06
P.S.
переименуйте переменную pObjProc в, например, pObjProcAddr. Не заметил, что совпадает с до буквы с типом PObjProc
softwarer
Дата: 11.10.2019 13:05:08
HOME_X
Возможно ли описанный процедурный тип передать через тип OleVariant

Конечно, можно. Вопрос в том, как этот вариант потом обработает тот, кто его применяет. А так очень просто - привести тип к Method и как угодно передать два четырёхбайтных указателя. Например, просто конвертировав в строку через IntToHex.

Василий 2
Процедура - просто указатель, приводи к Pointer и передавай

Ну вот привести к pointer у него, прямо скажем, вряд ли получится. Во всяком случае так, чтобы остаться довольным результатом.