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