powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Procedure type передать через тип OleVariant
14 сообщений из 14, страница 1 из 1
Procedure type передать через тип OleVariant
    #39874941
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Возможно ли описанный процедурный тип передать через тип 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
Procedure type передать через тип OleVariant
    #39874945
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем?
...
Рейтинг: 0 / 0
Procedure type передать через тип OleVariant
    #39874984
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему именно олевариант? Как обычная переменная не покатит?
...
Рейтинг: 0 / 0
Procedure type передать через тип OleVariant
    #39875019
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедура - просто указатель, приводи к Pointer и передавай
...
Рейтинг: 0 / 0
Procedure type передать через тип OleVariant
    #39875024
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,
В помощь тебе TVarData.
...
Рейтинг: 0 / 0
Procedure type передать через тип OleVariant
    #39875027
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerЗачем?
Вангую, что он её куда-нибудь в VBScript хочет передать...
...
Рейтинг: 0 / 0
Procedure type передать через тип OleVariant
    #39875055
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Procedure type передать через тип OleVariant
    #39875058
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
переименуйте переменную pObjProc в, например, pObjProcAddr. Не заметил, что совпадает с до буквы с типом PObjProc
...
Рейтинг: 0 / 0
Procedure type передать через тип OleVariant
    #39875152
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XВозможно ли описанный процедурный тип передать через тип OleVariant
Конечно, можно. Вопрос в том, как этот вариант потом обработает тот, кто его применяет. А так очень просто - привести тип к Method и как угодно передать два четырёхбайтных указателя. Например, просто конвертировав в строку через IntToHex.

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

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

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

Proc := Button1Click;

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


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