Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос о параметрах интефейсных функций


vasiliy87 ©   (2011-09-05 15:59:00) 

Здравствуйте. Создаю небольшой интерфейс, который могли бы использовать и другие языки программирования, поддерживающие интерфейсы модели COM. Назрел вопрос о совметимости параметров функций. Допустим есть некий интерфейс и функция:

ITestInterface = interface
 function Test(MyRec: PMyRec): integer; stdcall;
end;


Тут как бы все понятно, параметр у функции один, это указатель на запись TMyRec. Подскажите пожалуйста, есть ли какая-нибудь разница в немного другом, удобном для меня представлении этой же функции, а именно, что если я запишу ее так:

function Test(var MyRec: TMyRec): integer; stdcall;

Прошерстил Windows.pas, и во многих местах встречаю var, но и просто указателей на записи очень много, полагаю, разный народ в разные годы его составлял, поэтому нет единого написания. Буду благодарен за любые пояснения.


Dimka Maslov   (2011-09-05 17:39:00) [1]

Вообще в  COM-интерфейсах можно передавать только параметры определённых типов. В противном случае может всё перестать работать. На самом деле это не так, передавать можно всё, что угодно, но только если сервер и клиент разработаны совместно, работают в одном адресном пространстве и разработчик отчётливо понимает, что он делает


Медвежонок Пятачок   (2011-09-05 17:37:00) [2]

более интересно если он пишет не на си а на vba.
и как он сконструирует рекорд?


Игорь Шевченко   (2011-09-05 17:36:00) [3]

Запрещается:
5. Преднамеренное использование разных ников в одной ветке.


vasiliy87   (2011-09-05 17:35:00) [4]

gosha52,
да да, именно это меня и интересует.


gosha52   (2011-09-05 17:33:00) [5]

> он не сможет вызвать твою функцию через @his_record
Это если он тоже пишет на паскале. А в си как будет выглядеть вариант с var интересно? Помоему как раз как первый вариант, нет разве?


Игорь Шевченко   (2011-09-05 16:51:00) [6]


> он не сможет вызвать твою функцию через @his_record


сможет, добавив ^


Медвежонок Пятачок   (2011-09-05 16:13:00) [7]

разница будет для вызывающего.
если у тебя будет var, а у него будет рекорд, то он не сможет вызвать твою функцию через @his_record
Будет вынужден создать переменную и натравить ее на свой рекорд.


Наверх

Титульная страница Поиск, карта сайта Написать письмо