Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 1.07 MB
Время: 0.173 c
14-1095233566
Ломброзо
2004-09-15 11:32
2004.10.03
Прикрыли почту


3-1094122564
Rostislav Rotaru
2004-09-02 14:56
2004.10.03
Нужен ваш совет


3-1094566704
Виталий Панасенко
2004-09-07 18:18
2004.10.03
Обновление VIEW


14-1094834719
Шишкин Илья
2004-09-10 20:45
2004.10.03
Помогите оптимизировать процедуру


4-1093525727
Kniff
2004-08-26 17:08
2004.10.03
Масштабирование окна.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский