Необходимо запретить создание объекта через CoCreateInstance, а вместо этого использовать другой объект — фабрику. Собственно вопрос:
Как в методе одного COM объекта создать другой COM объект вручную и вернуть на него указатель ?
Оба COM объекта находятся в одной DLL
> Как в методе одного COM объекта создать другой COM объект вручную и вернуть на него указатель ?
> Оба COM объекта находятся в одной DLL
В нужном Вам методе вызываете CoCreateInstance для другого COM объекта и возвращаете ссылку на него как результат.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Здравствуйте, 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;
Здравствуйте, 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 >>