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

Вниз

OLE automation   Найти похожие ветки 

 
Алексей Петухов   (2006-01-11 14:13) [0]

Здравствуйте, уважаемые Мастера.

 Подскажите, как вернуть ссылку на объект?
 Делаю так:
PFRSrv_TLB.pas:
1. Создал ActiveX Library, Automftion Object.
2. CoClass - "Application", Interface "_Application" (включил в CoClass "Application").
3. Добавил интерфейс "Documents". В нём есть функция Count.
4. Затем в "_Application" добавил свойство "Documents" типа " struct tag Documents *", параметр "prop" типа "Documents **".
5. В итоге имеем функцию :
function TApplication.Get_Documents: Documents;
begin
end;


теперь код:
App:=CreateComObject(PFRSrv_TLB.CLASS_Application)as PFRSrv_TLB._Application;
App.Documents
- возващает nil.

Заранее благодарю.


 
Digitman ©   (2006-01-11 14:21) [1]


> имеем функцию :
> function TApplication.Get_Documents: Documents;
> begin
> end;


> App.Documents - возващает nil.


а что иное кроме nil  можно ожидать от именно такой реализации данной ф-ции ?


 
Алексей Петухов   (2006-01-11 18:14) [2]

Да....
Вы что думаете я контуженный?
Может быть не совсем корректно задан вопрос....
Вопрос:
как вернуть ссылку на объект Documents?
еще точнее: Что написать в теле функции после Result:= ?


 
Digitman ©   (2006-01-11 18:19) [3]


> Что написать в теле функции после Result:= ?


Result := Create/GetSomeDocumentsObject as Documents;


 
Алексей Петухов   (2006-01-11 18:20) [4]

Ну к примеру мне нужно ужнать колличество документов:
App.Documents.Count
Дело в том что у меня нет омыта работы с ActiveX и интерфейсами собственного изоговления. Может поэтому и небыл понят?

Спасибо за преренос в "новички" :-)


 
Алексей Петухов   (2006-01-11 18:23) [5]

т.е. объект Documents надо еще создать?
хммм
А он не создается при созданни интерфейса Application автоматом?
А как тогда создать объек типа interface?


 
Digitman ©   (2006-01-11 18:30) [6]


> т.е. объект Documents надо еще создать?


Ну а как же иначе ?
Обращение к св-ву объекта предполагает существование этого объекта !


> А он не создается при созданни интерфейса Application автоматом?


С какого перепугу ?

За это ты сам ответственен.

Ты можешь создать его в любой удобный тебе момент - при конструировании объекта Application или прямо в теле метода Get_Documents .. Все зависит от конечной логики использования этого объекта ..


> как тогда создать объек типа interface?


никак.

тобой д.б. создан объект класса-наследника , например, TInterfacedObject, который реализует интерфейс Documents


 
Алексей Петухов   (2006-01-11 19:19) [7]

Немного недопонял.
1. Interface - это не класс как таковой?
2. Если в Documents будут создаваться документы по требованию пользователся (Documents.items[i]). То этот объект надо создать заранее при конструировании Application?
3. В чем различия класса/объекта и интерфейса?


 
Набережных С. ©   (2006-01-11 21:21) [8]

Скорее всего, в данном случае достаточно будет реализовать IDocuments в том же объекте, который реализует IApplication. Такое вот подозрение:))

> 1. Interface - это не класс как таковой?

Нет. Интерфейс - это структура, полями которой являются указатели на методы, т. е. она содержит поля процедурного типа. Интерфейс можно представить таким псевдокодом:

TAddRef = function(...
TRelease = function(..
TQueryInterface = function(...

IUnknown = record
 AddRef: TAddRef;
 Release: TRelease;
 QueryInterface: TQuertyInterface;
end;

TMyMethod1 = function(Param: TSomeType1): HResult;
TMyMethod2 = function(Param: TSomeType2): HResult;

IMyInterface = packed record
 BaseInterface: IUnknown;
 MyMethod1: TMyMethod1;
 MyMethod2: TMyMethod2
end;

Это достаточно грубое представление, на самом деле интерфейсная переменная "устроена" чуть иначе, она указатель на указатель, но это уже несущественные в данном случае детали. Важно то, что интерфейс - это просто "декларация о намерениях".

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

Сразу скажу, что для практической работы этого описания совершенно недостаточно, без чтения книг и документации не обойтись.



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

Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
15-1136505507
BiggieSmalls
2006-01-06 02:58
2006.01.29
Еще вопрос по серийному номеру тома


1-1135162675
Steplerr
2005-12-21 13:57
2006.01.29
Icon в ListBox


15-1136932339
Andy BitOff
2006-01-11 01:32
2006.01.29
Ветка "Начинающим" - читай как орешник


2-1136884376
Nirvana
2006-01-10 12:12
2006.01.29
Использование функций одного модуля в другом


2-1136802938
BiggieSmalls
2006-01-09 13:35
2006.01.29
Свернуть окно





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский