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

Вниз

Delphi vs. C++   Найти похожие ветки 

 
Суслик ©   (2004-09-08 11:28) [360]


> Romkin ©   (08.09.04 11:23) [358]

вот кстати вопрос чисто по интерфейсам:
как при передачи интерфейса в качестве параметра в метод управлять механизмом подсчета ссылок?


 
Romkin ©   (2004-09-08 11:29) [361]

Кстати, возвращаясь к нашим баранам, "удобству" вызова Invoke мы обязаны, как ни смешно, визуалбейсиковцам :(
Дело в том, что в VB исторически сложилось, что, например, процедуру proc(A,B,C) можно вызвать:
proc(1,2,3) и proc(1,,3) и, главное, proc(B=2,C=3,A=1).
И теперь, даже вызывая Invoke из С, вы должны подать не только массив входных значений, но еще и массив соответствующих имен этих параметров (и, эссно, имена должны знать)
:)))


 
Danilka ©   (2004-09-08 11:30) [362]

Так все-таки, что лучше, Дельфи или С++?
А то, наговорили ужо за три сотни с половиною, а так и непонятно, что-же лучше.

;)


 
Romkin ©   (2004-09-08 11:31) [363]

Суслик ©  (08.09.04 11:28) [360] Если параметр имеет тип интерфейс - делать ничего не нать. Если поинтер - плиз, addref/release сам делай.


 
Romkin ©   (2004-09-08 11:31) [364]

Danilka ©  (08.09.04 11:30) [362] Лучше тот язык, который ты знаешь. Все остальное - суета сует и протчая...


 
Danilka ©   (2004-09-08 11:33) [365]

[364] Romkin ©   (08.09.04 11:31)
Эт я и сам знаю, лучче PL/SQL ничего нет.
Мне просто интересно, итог у ветки будет или нет.
:))


 
Суслик ©   (2004-09-08 11:33) [366]


> Romkin ©   (08.09.04 11:31) [363]

я не говорю, что нать, а что не нать.

Вопрос: как можно?


 
Суслик ©   (2004-09-08 11:34) [367]


> Romkin ©   (08.09.04 11:29) [361]

Дай что-нить почитать про invoke.
Когда я хармона читал, я это как-то пропустил, т.к. не понял - в тот момент мне это показалось ненужным, может и зря.


 
Суслик ©   (2004-09-08 11:35) [368]


> Мне просто интересно, итог у ветки будет или нет.
> :))

Конечно - ее закроют.


 
0d08h   (2004-09-08 11:38) [369]

Danilka
Лучше то что ты лучше умееш использовать.
Все остальное суета сует и сметение духа.


 
Акуличев Дмитрий   (2004-09-08 11:39) [370]


> И теперь, даже вызывая Invoke из С, вы должны подать не
> только массив входных значений, но еще и массив соответствующих
> имен этих параметров

А вот и неправда.


 
Danilka ©   (2004-09-08 11:39) [371]

[369] 0d08h   (08.09.04 11:38)
Дык, а если я ни дельфи ни ц++ низнаю, что делать-то?
Хотел здеся разобрацца, а вижу один оффтопик - интерфейсы, причем здесь лучше/нелучше? :))


 
Romkin ©   (2004-09-08 11:40) [372]

Суслик ©  (08.09.04 11:33) [366] Ну как? хочешь отключить автомат - преобразуй к pointer :))
Суслик ©  (08.09.04 11:34) [367] Хм... Ищи книгу "СОМ и ATL" вроде, толстая такая. Там - практически все :)) Но на С++. Но зато понимаешь, что и как работает. Половина книги - программирование СОМ на С++ без ATL - эт фундаментально. Знакомый хвастался, что по ней сделал класс, реализующий полностью IDispatch без ATL. Мдя... 15 кило текста :)))
Ну и рекомендация Borland уже была:
For more information about aggregation, controlling objects, and interfaces, see the Inside OLE, second edition, by Kraig Brockschmidt, the Microsoft Web site, or the Windows SDK Help.


 
Суслик ©   (2004-09-08 11:41) [373]


> Danilka ©   (08.09.04 11:39) [371]

Забей - не разберешься.
Учи оба языка и дело с концом. Какой не понравится срочно забудешь.


 
Суслик ©   (2004-09-08 11:42) [374]


> Romkin ©   (08.09.04 11:40) [372]
> Суслик ©  (08.09.04 11:33) [366] Ну как? хочешь отключить
> автомат - преобразуй к pointer :))

это один из способов,
второй
procedure proc(const i: IMyIntf);


 
Romkin ©   (2004-09-08 11:43) [375]

Суслик ©  (08.09.04 11:34) [367] Но чисто вызов invoke со сборкой параметров - нафиг :) В Delphi уже написано...


 
0d08h   (2004-09-08 11:43) [376]

Danilka
Учи Паскаль он проще только не дай бог не Дельфи с нуля именно Паскаль.
Есть такая книженция К. Боон "Паскаль для всех" 1983 г. по нему можно кого угодно научить сам с нее начинал


 
Romkin ©   (2004-09-08 11:44) [377]

Суслик ©  (08.09.04 11:42) [374] А. Да, не должен вроде. Если так - то хорошо. Но мне до сих пор ни разу не понадобилось управлять подсчетом ссылок :))
Нет, вру, один раз, когда интерфейсы вставлял в список как указатели...


 
Danilka ©   (2004-09-08 11:45) [378]

[373] Суслик ©   (08.09.04 11:41)
В том-то и дело, что учил оба, а теперь уже оба забыл. Горе-то какое. А учить оба заново - низя - старый я, память уже не та.

Порошу модераторов изничтожить весь оффтопик! Пусть лучше здесь крутые распальцованые перцы разбираюцца, что есть рулез, а что есть зло, а обсуждателей интерфейсов выгнать в другую ветку. Вот-так!

:))


 
Суслик ©   (2004-09-08 11:45) [379]


> Romkin ©   (08.09.04 11:43) [375]

Если я ошибаюсь - к раннему связыванию это отношения не имеет?


 
Акуличев Дмитрий   (2004-09-08 11:45) [380]


> Суслик ©   (08.09.04 11:42) [374]
> второй
> procedure proc(const i: IMyIntf);

Это не отключает подсчёт ссылок.


 
Суслик ©   (2004-09-08 11:47) [381]


> Romkin ©   (08.09.04 11:44) [377]

не может быть, а точно.
это я так, для информации сказал.


> Danilka ©   (08.09.04 11:45) [378]

Ага :))) Когда я читал Рихтера, я тоже вспомнил, что его читал - лет 5 назад, только прошлое издание :)))) Типа того?
ТАкого не бывает - если учил, забыть нельзя.


 
Суслик ©   (2004-09-08 11:47) [382]


> Акуличев Дмитрий   (08.09.04 11:45) [380]


> Это не отключает подсчёт ссылок.

А ты проверь?


 
Romkin ©   (2004-09-08 11:52) [383]

Суслик ©  (08.09.04 11:45) [379] Конечно. Позднее потому и называется так, что все вызовы идут через invoke


 
Суслик ©   (2004-09-08 11:53) [384]


> Romkin ©   (08.09.04 11:52) [383]

вот, а про позднее я ничего и не знаю.
А для чего ты его используешь если НЕ для ком?


 
Romkin ©   (2004-09-08 11:54) [385]

Суслик ©  (08.09.04 11:53) [384] Что значит НЕ для СОМ? Я кроме СОМ ничем и не пользуюсь :)


 
Суслик ©   (2004-09-08 11:55) [386]


> Акуличев Дмитрий   (08.09.04 11:45) [380]

В зависимости от const в начале метода либо будет
00452381 E8363CFBFF       call @IntfAddRef
либо
нет

Проверь, только что посмотрел.


 
Суслик ©   (2004-09-08 11:55) [387]


> Romkin ©   (08.09.04 11:54) [385]

значит мне сейчас это не надо.


 
Romkin ©   (2004-09-08 12:05) [388]

Суслик ©  (08.09.04 11:55) [387] НУ наверно можно, конечно, чделать свой транспорт и делать удаленные вызовы - к другому процессу, например. Но нафига, если все уже в СОМ сделано.
Сейчас не надо - может быть. Но СОМ я посоветовал бы изучить, как только входишь во вкус...
Когда тебе не важно, где именно находится объект, ты им просто пользуешься, да еще вся информания записана сразу в нем :))
Да и просто применению интерфейсов помогает, понимаешь, какие методы и какие классы должны быть


 
Суслик ©   (2004-09-08 12:09) [389]


> Romkin ©   (08.09.04 12:05) [388]

КОМ наверное прийдется изучать.

При том, что как писать КОМ в дельфи я в общем-то знаю. В проекте есть пара объектов. Но, согласен, все это на уровне понимания внешний проявлений и правил использования.

С тем, что ком помогает пониманию интерфейсов позволь несогласится. Хотя, стоит проверить.


 
Акуличев Дмитрий   (2004-09-08 12:15) [390]


> Суслик ©   (08.09.04 11:55) [386]

Если параметр не конст, то он внутри процедуры обрамляется дополнительной парой addref/release. Если он конст -- то нет.
Но это не значит, что вообще не ведётся подсчёт ссылок.
В зависимости от того, что происходит внутри процедуры компилятор будет вызывать addref/release там, где это надо.


 
Суслик ©   (2004-09-08 12:18) [391]


> Акуличев Дмитрий   (08.09.04 12:15) [390]


> В зависимости от того, что происходит внутри процедуры компилятор
> будет вызывать addref/release там, где это надо.

В этом ты абсолютно прав. Я утвержал/спрашивал обратное?

>>как при передачи интерфейса в качестве параметра в метод управлять механизмом подсчета ссылок?


 
GRAND25 ©   (2004-09-08 12:21) [392]

Все хорошо, только причем тут Делфи и С++? Ветка вроде бы об этом, а не о легкости программирования междумордий.

Поэтому пишу по сабжу: оба обсуждаемых языка хороши, помиритесь.

Долой Спартак!


 
Суслик ©   (2004-09-08 12:24) [393]


> GRAND25 ©   (08.09.04 12:21) [392]

здесь уже постов 200 оффтоп :)))
про дельфи и си уже никто вроде не спорит.


 
Акуличев Дмитрий   (2004-09-08 12:25) [394]


> Суслик ©   (08.09.04 12:18) [391]
> >>как при передачи интерфейса в качестве параметра в метод
> управлять механизмом подсчета ссылок?

Ну если так, то ответ -- никак.

Модификатор параметра управляет механизмом подсчёта не при передаче, а внутри процедуры.

Вот такой я злой занудный формалист ;)


 
Акуличев Дмитрий   (2004-09-08 12:27) [395]


> про дельфи и си уже никто вроде не спорит.

Да кому этот си нуфиг нужен...


 
Суслик ©   (2004-09-08 12:34) [396]


> Акуличев Дмитрий   (08.09.04 12:25) [394]

Ой, улыбнулся! Ну радостно :))

Все же тут надо внести ясность.
Если внутри процедуры вызывать методы ин-са и в случае const никакого подсчета ссылок не будет.

Т.е. если написать const и не присваивать внутри метода интерфейс, то можно сказать, что мы смогли направить механизм согласно моему вопросу - ни разу за время работы методы addref не изменится.


 
euru ©   (2004-09-08 12:38) [397]

Насколько я знаю, посчёт ссылок ведётся только в СОМ и в реализации интерфейсов в Delphi (там их изначально под COM подгоняли).
В Java и CORBA, если я не ошибаюсь, этого нет.
Кстати, в .Net вроде бы тоже уже не упоминается AddRef, ReleaseRef и QueryInterface.


 
Игорь Шевченко ©   (2004-09-08 12:41) [398]

Акуличев Дмитрий   (08.09.04 12:27) [395]


> Да кому этот си нуфиг нужен...


Прямо удивительно. И синтаксис непонятный и для работы с интерфейсами неудобно. Сколько же ежиков плачут, колются, но продолжают грызть кактус :)


 
Суслик ©   (2004-09-08 12:46) [399]

Можно поднять еще один вопрос о дельфи?

Наверное все знают, что есть такие функции finalize и initialize и все знают, что они делают.
Это очевидный compile magic.
Вы не найдете явного их объявления нигде - их или их аналоги вставляет компилятор в код.
Фактически они эксивалетны _finilize и _initialize из system.
Рядом с _finilize есть _AddRef. Который понятно , что делает из названия.

Вопрос: Почему _AddRef не вынесен в доступную фукнкция, как это сделано для finlize и initilize? Как вы думаете, в чем причины?


 
Акуличев Дмитрий   (2004-09-08 12:55) [400]


> Сколько же ежиков плачут, колются, но продолжают грызть
> кактус :)

А ещё миллион мух не может ошибаться.
:)



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 вся ветка

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

Наверх




Память: 1.08 MB
Время: 0.124 c
14-1094724754
DiamondShark
2004-09-09 14:12
2004.10.03
Тест клиента


14-1095244068
PVOzerski
2004-09-15 14:27
2004.10.03
вопрос о ELF в Linux и FreeBSD


14-1095347951
BigFat
2004-09-16 19:19
2004.10.03
Непонятные слова


1-1095255024
NeyroSpace
2004-09-15 17:30
2004.10.03
TTreeView. Сделал свою отрисовку в CustomDraw. Осталась


1-1095455920
Чайник
2004-09-18 01:18
2004.10.03
Не понял! Цвета палитры виндовс (типа clBtnShadow и т.д)