![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос о параметрах интефейсных функций
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
Будет вынужден создать переменную и натравить ее на свой рекорд.