Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
HOME_X Member Откуда: Сообщений: 2606 |
Доброго дня господа ! Возможно ли описанный процедурный тип передать через тип 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] Ответить | Цитировать Сообщить модератору |
white_nigger Member Откуда: Тула Сообщений: 2446 |
Зачем? |
10 окт 19, 23:52 [21991766] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1804 |
Почему именно олевариант? Как обычная переменная не покатит? |
11 окт 19, 09:22 [21991820] Ответить | Цитировать Сообщить модератору |
Василий 2 Member Откуда: Сообщений: 1016 |
Процедура - просто указатель, приводи к Pointer и передавай |
11 окт 19, 10:26 [21991887] Ответить | Цитировать Сообщить модератору |
ziv-2014 Member Откуда: Сообщений: 585 |
HOME_X, В помощь тебе TVarData. |
11 окт 19, 10:32 [21991896] Ответить | Цитировать Сообщить модератору |
alekcvp Member Откуда: Сообщений: 2664 |
Вангую, что он её куда-нибудь в VBScript хочет передать... |
||
11 окт 19, 10:38 [21991902] Ответить | Цитировать Сообщить модератору |
Кроик Семён Member Откуда: СПб --> Dortmund Сообщений: 6667 |
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] Ответить | Цитировать Сообщить модератору |
Кроик Семён Member Откуда: СПб --> Dortmund Сообщений: 6667 |
P.S. переименуйте переменную pObjProc в, например, pObjProcAddr. Не заметил, что совпадает с до буквы с типом PObjProc |
11 окт 19, 11:30 [21991963] Ответить | Цитировать Сообщить модератору |
softwarer Member Откуда: 127.0.0.1 Сообщений: 64523 Блог |
Конечно, можно. Вопрос в том, как этот вариант потом обработает тот, кто его применяет. А так очень просто - привести тип к Method и как угодно передать два четырёхбайтных указателя. Например, просто конвертировав в строку через IntToHex.
Ну вот привести к pointer у него, прямо скажем, вряд ли получится. Во всяком случае так, чтобы остаться довольным результатом. |
||||
11 окт 19, 13:05 [21992080] Ответить | Цитировать Сообщить модератору |
ziv-2014 Member Откуда: Сообщений: 585 |
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] Ответить | Цитировать Сообщить модератору |
softwarer Member Откуда: 127.0.0.1 Сообщений: 64523 Блог |
Есть.
Вы чрезмерно категоричны. |
||||
11 окт 19, 13:20 [21992100] Ответить | Цитировать Сообщить модератору |
ziv-2014 Member Откуда: Сообщений: 585 |
Товарищ VBA юзает :) |
||||||
11 окт 19, 13:50 [21992129] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1804 |
т.к. про VBA и передачу куда-то еще нет и слова, то можно вот такvar Proc: TProc<TObject>; Proc := Button1Click; Proc(nil); |
11 окт 19, 14:06 [21992152] Ответить | Цитировать Сообщить модератору |
Василий 2 Member Откуда: Сообщений: 1016 |
Процедурный тип это простой указатель, а тип метода это уже чуть посложнее, но не сильно |
11 окт 19, 15:24 [21992267] Ответить | Цитировать Сообщить модератору |
Все форумы / Delphi | ![]() |