Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.18;
Скачать: CL | DM;

Вниз

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

 
vasiliy87   (2011-09-05 15:59) [0]

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

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


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

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

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


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

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


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


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


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


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

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


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

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


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

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


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

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


 
Dimka Maslov ©   (2011-09-05 17:39) [7]

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



Страницы: 1 вся ветка

Текущий архив: 2011.12.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1315865245
Gu
2011-09-13 02:07
2011.12.18
Отловить закрытие приложения


2-1315570446
Евгений07
2011-09-09 16:14
2011.12.18
WSAWaitForMultipleEvents для однонитевого сервера


1-1277298765
granulated
2010-06-23 17:12
2011.12.18
EInvalidPointer после выхода из функции.


1-1277214927
Дмитрий Белькевич
2010-06-22 17:55
2011.12.18
Почему может не работать FileExisit?


15-1312615274
PreDatoR
2011-08-06 11:21
2011.12.18
Ваши любимые компьютерные игры