Форум: "Начинающим";
Текущий архив: 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;
- возващает nil.
App.Documents
Заранее благодарю.
← →
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.043 c