Создание COM объекта "руками"
От: Dimsk  
Дата: 11.11.03 12:19
Оценка:
Необходимо запретить создание объекта через CoCreateInstance, а вместо этого использовать другой объект — фабрику. Собственно вопрос:

Как в методе одного COM объекта создать другой COM объект вручную и вернуть на него указатель ?
Оба COM объекта находятся в одной DLL
Re: Создание COM объекта "руками"
От: Mr. Partizan Россия  
Дата: 12.11.03 05:58
Оценка:
> Как в методе одного COM объекта создать другой COM объект вручную и вернуть на него указатель ?
> Оба COM объекта находятся в одной DLL
В нужном Вам методе вызываете CoCreateInstance для другого COM объекта и возвращаете ссылку на него как результат.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Re[2]: Создание COM объекта "руками"
От: Dimsk  
Дата: 12.11.03 07:32
Оценка:
Здравствуйте, Mr. Partizan, Вы писали:

MP>В нужном Вам методе вызываете CoCreateInstance для другого COM объекта и возвращаете ссылку на него как результат.


В этом-то и заключается вопрос: У нас имеется класс, реализующий некоторый COM-интерфейс, но при этом в IDL помеченный как noncreatable. Как в методе другого класса создать экземпляр первого класса и вернуть на него указатель как на COM объект ?

Правильно ли так?

type
TFirstCOMClass = class(TAutoObject, ICustomInterface1)
....

function TSecondCOMClass.CreateFirstCOMClass:ICustomInterface1;
var objFirstClass:TFirstCOMClass;
begin
  objFirstClass := TFirstCOMClass.Create; //корректно ли так делать ?
  Result := objFirstClass As ICustomInterface1;

//objFirstClass.Free - когда вызывать 
end;
Re[3]: Создание COM объекта "руками"
От: Shadowspan Россия  
Дата: 12.11.03 08:08
Оценка: 3 (1)
Здравствуйте, Dimsk, Вы писали:

D>Правильно ли так?


D>

D>type
D>TFirstCOMClass = class(TAutoObject, ICustomInterface1)
D>....

D>function TSecondCOMClass.CreateFirstCOMClass:ICustomInterface1;
D>var objFirstClass:TFirstCOMClass;
D>begin
D>  objFirstClass := TFirstCOMClass.Create; //корректно ли так делать ?
D>  Result := objFirstClass As ICustomInterface1;

D>//objFirstClass.Free - когда вызывать 
D>end;


Корректно. Но лучше:

function TSecondCOMClass.CreateFirstCOMClass:ICustomInterface1;
begin
  Result := TFirstCOMClass.Create as ICustomInterface1; 
  //objFirstClass.Free - когда вызывать  - никогда
end;
... << RSDN@Home 1.1.0 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.