Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Procedure type передать через тип OleVariant  [new]
HOME_X
Member

Откуда:
Сообщений: 2440
Доброго дня господа !

Возможно ли описанный процедурный тип передать через тип 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;

Спасибо

Сообщение было отредактировано: 12 окт 19, 09:15
10 окт 19, 23:21    [21991756]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2209
Зачем?
10 окт 19, 23:52    [21991766]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1607
Почему именно олевариант? Как обычная переменная не покатит?
11 окт 19, 09:22    [21991820]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
Василий 2
Member

Откуда:
Сообщений: 811
Процедура - просто указатель, приводи к Pointer и передавай
11 окт 19, 10:26    [21991887]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
ziv-2014
Member

Откуда:
Сообщений: 468
HOME_X,
В помощь тебе TVarData.
11 окт 19, 10:32    [21991896]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
alekcvp
Member

Откуда:
Сообщений: 1645
white_nigger
Зачем?

Вангую, что он её куда-нибудь в VBScript хочет передать...
11 окт 19, 10:38    [21991902]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6573
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 окт 19, 11:27    [21991959]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6573
P.S.
переименуйте переменную pObjProc в, например, pObjProcAddr. Не заметил, что совпадает с до буквы с типом PObjProc
11 окт 19, 11:30    [21991963]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 59476
Блог
HOME_X
Возможно ли описанный процедурный тип передать через тип OleVariant

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

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

Ну вот привести к pointer у него, прямо скажем, вряд ли получится. Во всяком случае так, чтобы остаться довольным результатом.
11 окт 19, 13:05    [21992080]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
ziv-2014
Member

Откуда:
Сообщений: 468
softwarer,
Есть структура TVarData, ее и нужно юзать.
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_TVarData.html
http://docwiki.embarcadero.com/Libraries/Rio/en/System.TVarData
11 окт 19, 13:17    [21992097]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 59476
Блог
ziv-2014
Есть структура TVarData

Есть.

ziv-2014
ее и нужно юзать.

Вы чрезмерно категоричны.
11 окт 19, 13:20    [21992100]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
ziv-2014
Member

Откуда:
Сообщений: 468
softwarer
ziv-2014
Есть структура TVarData

Есть.

ziv-2014
ее и нужно юзать.

Вы чрезмерно категоричны.

Товарищ VBA юзает :)
11 окт 19, 13:50    [21992129]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1607
т.к. про VBA и передачу куда-то еще нет и слова, то можно вот так
var
  Proc: TProc<TObject>;

Proc := Button1Click;

Proc(nil);
11 окт 19, 14:06    [21992152]     Ответить | Цитировать Сообщить модератору
 Re: Procedure type передать через тип OleVariant  [new]
Василий 2
Member

Откуда:
Сообщений: 811
Процедурный тип это простой указатель, а тип метода это уже чуть посложнее, но не сильно
11 окт 19, 15:24    [21992267]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить