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

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

Почему в Delphi работает а в C++ нет ? [WinXP]


User0 ©   (2002-10-15 15:42:00) 

Прочитал следующее:

Variant WORD=CreateOleObject("Word.Document.10");
Word.Application .....

Но компилер пишет 4то у Variant нет метода Application и прочее... Почему ?


User0   (2002-10-15 17:39:00) [1]

А сто пудов :)))

Best Before 2024 - ти мля ШАМАН :)))))) АА Заработало !!!


User0   (2002-10-15 17:30:00) [2]

To saxon:

Word.Application - так типа компиляторски правильно, потому как если бы он был типа _Document или Word_2k::WordDocument (все равно) то тогда бы было Word->Application

Ок... я кажется понял... Спасибо.


Dimka Maslov   (2002-10-15 17:00:00) [3]

>saxon
Теоретически на C++ можно сделать и позднее связывания, но его надо делать вручную.


saxon   (2002-10-15 16:55:00) [4]

2 Dimka Maslov
> Стандарт языка С++ такого не позволяет, поэтому там возможен
Так что в С++ нельзя сделать позднее связывание или я не свсем все понял?

2 User0
А почему
Word.Application а не
Word->Application???? разве не -Word- указатель ?


Dimka Maslov   (2002-10-15 16:44:00) [5]

После такого присвоения Delphi рассматиривает вариантную переменную как указатель на интерфейс IDispatch, а вызовы "методов" этого "объекта" в конечном итоге преобразуются в вызовы методов интерфейса, служащих для вызова реальных методов объекта. При этом ошибки в написании таких имён методов обнаруживаются только в время исполнения, компилятор их пропускает.
Стандарт языка С++ такого не позволяет, поэтому там возможен только импорт библиотеки типов с созданием заголовочных файлов, содержащих классы для обращения к объекту автоматизации.


Dr_Mike   (2002-10-15 16:41:00) [6]

А какая разница ? Писать с кавычками или без, в тексте или при присваивании ? - компилятор то все равно это сам делает, так что так проще и, по-моему, удобнее..


Best Before 2024   (2002-10-15 16:35:00) [7]

2 PVOzerski © (15.10.02 16:29)
Delphi,видимо, "интерпретирует" эти строки, т.е. работает с ними в run-time с поздним связыванием, но зато позволяет их писать "по-человечески", как VB


Romkin   (2002-10-15 16:32:00) [8]

Зачем мудрить?
var V: variant;

V := CreateOleObject("Word.Application");
V.FileOpen(...


PVOzerski   (2002-10-15 16:29:00) [9]

Честно говоря, я почти не работал с OLE automation, наверное, поэтому странному синтаксису, который здесь проявляет Delphi, удивляюсь. Суть странности этого синтаксиса состоит в том, что после присвоения variant"у результата функции CreateOleObject последний начинает вести себя как класс с методами, имена которых, во-первых, выясняются только at Run-time, но при этом пишутся в тексте программы именно как имена методов, а не как строковые переменные, да еще к тому же могут содержать в себе символы, которые Паскалю в страшном сне не снились... К сожалению, могу посоветовать только посмотреть примеры работы с OLE automation, наверняка имеющиеся в Builder"е.


Best Before 2024   (2002-10-15 16:18:00) [10]

в С++ так писать нельзя. Надо или подключать TLB, либо использовать OlepropertyGet/OlepropertySet/OleProcedure/OleFunction


User0   (2002-10-15 16:13:00) [11]

Да не ты понял... :) У любой переменной типа Variant нет свойства Application и прочих... Почему ? Может я 4то-то не подгрузил ?


PVOzerski   (2002-10-15 16:07:00) [12]

Может, потому, что в C++ WORD и Word - разные имена?


Наверх

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