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

Вниз

Почему в Delphi работает а в C++ нет ?   Найти похожие ветки 

 
User0 ©   (2002-10-15 15:42) [0]

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

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

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


 
PVOzerski ©   (2002-10-15 16:07) [1]

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


 
User0 ©   (2002-10-15 16:13) [2]

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


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

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


 
PVOzerski ©   (2002-10-15 16:29) [4]

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


 
Romkin ©   (2002-10-15 16:32) [5]

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

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


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

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


 
Dr_Mike ©   (2002-10-15 16:41) [7]

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


 
Dimka Maslov ©   (2002-10-15 16:44) [8]

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


 
saxon ©   (2002-10-15 16:55) [9]

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

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


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

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


 
User0 ©   (2002-10-15 17:30) [11]

To saxon:

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

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


 
User0 ©   (2002-10-15 17:39) [12]

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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.026 c
1-78350
mas_alexey
2002-10-14 17:56
2002.10.24
Listox


1-78521
Flavio
2002-10-13 23:36
2002.10.24
Как задать цвет ячейки StringGrid


14-78590
Serzhik
2002-10-01 18:20
2002.10.24
отладка в Delphi


7-78684
DenKop
2002-08-16 00:55
2002.10.24
Как определить колличество установленных CDROM ов и их имена?


1-78352
Schummi
2002-09-15 09:53
2002.10.24
Буфер обмена