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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
15-1136185376
begin...end
2006-01-02 10:02
2006.01.29
С Днём рождения! 2 января


2-1137240746
Compton's Most Wanted
2006-01-14 15:12
2006.01.29
CreateProcess


15-1136091113
Sergey Masloff
2006-01-01 07:51
2006.01.29
Жаворонки и совы. Интересно узнать соотношение.


1-1135758191
guru-guru
2005-12-28 11:23
2006.01.29
Ошибка в при работе с Екселем


2-1136911936
RDS
2006-01-10 19:52
2006.01.29
вопрос по ToolHelp32