Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Procedure type передать через тип OleVariant / 14 сообщений из 14, страница 1 из 1
10.10.2019, 23:21
    #39874941
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
Доброго дня господа !

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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;


Спасибо
...
Рейтинг: 0 / 0
10.10.2019, 23:52
    #39874945
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
Зачем?
...
Рейтинг: 0 / 0
11.10.2019, 09:22
    #39874984
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
Почему именно олевариант? Как обычная переменная не покатит?
...
Рейтинг: 0 / 0
11.10.2019, 10:26
    #39875019
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
Процедура - просто указатель, приводи к Pointer и передавай
...
Рейтинг: 0 / 0
11.10.2019, 10:32
    #39875024
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
HOME_X,
В помощь тебе TVarData.
...
Рейтинг: 0 / 0
11.10.2019, 10:38
    #39875027
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
white_niggerЗачем?
Вангую, что он её куда-нибудь в VBScript хочет передать...
...
Рейтинг: 0 / 0
11.10.2019, 11:27
    #39875055
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
HOME_X,

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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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);



а вот что с этим делать дальше, может другие подскажут
...
Рейтинг: 0 / 0
11.10.2019, 11:30
    #39875058
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
P.S.
переименуйте переменную pObjProc в, например, pObjProcAddr. Не заметил, что совпадает с до буквы с типом PObjProc
...
Рейтинг: 0 / 0
11.10.2019, 13:05
    #39875152
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
HOME_XВозможно ли описанный процедурный тип передать через тип OleVariant
Конечно, можно. Вопрос в том, как этот вариант потом обработает тот, кто его применяет. А так очень просто - привести тип к Method и как угодно передать два четырёхбайтных указателя. Например, просто конвертировав в строку через IntToHex.

Василий 2Процедура - просто указатель, приводи к Pointer и передавай
Ну вот привести к pointer у него, прямо скажем, вряд ли получится. Во всяком случае так, чтобы остаться довольным результатом.
...
Рейтинг: 0 / 0
11.10.2019, 13:17
    #39875162
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
...
Рейтинг: 0 / 0
11.10.2019, 13:20
    #39875165
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
ziv-2014Есть структура TVarData
Есть.

ziv-2014ее и нужно юзать.
Вы чрезмерно категоричны.
...
Рейтинг: 0 / 0
11.10.2019, 13:50
    #39875189
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
softwarerziv-2014Есть структура TVarData
Есть.

ziv-2014ее и нужно юзать.
Вы чрезмерно категоричны.
Товарищ VBA юзает :)
...
Рейтинг: 0 / 0
11.10.2019, 14:06
    #39875209
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
т.к. про VBA и передачу куда-то еще нет и слова, то можно вот так
Код: pascal
1.
2.
3.
4.
5.
6.
var
  Proc: TProc<TObject>;

Proc := Button1Click;

Proc(nil);
...
Рейтинг: 0 / 0
11.10.2019, 15:24
    #39875288
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure type передать через тип OleVariant
Процедурный тип это простой указатель, а тип метода это уже чуть посложнее, но не сильно
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Procedure type передать через тип OleVariant / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]