![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильно передать IStream из DCOM-клиента на DCOM-сервер ? [Delphi, Windows]
Cheburek © (2004-11-15 20:44:00)Уважаемые мастера, здравствуйте.
Мучаюсь над проблемой передачи интерфейса IStream
из DCOM-клиента на DCOM-сервер для того, чтобы сервер
мог читать\писать поток, переданный ему клиентом.
Возможно ли такое вообще ? В описании к IStream сказано,
что это обычный СОМ-интерфейс. Я так понимаю что его пере-
давать в качестве параметра на DCOM сервера ? Или я не прав*?
Пример клиента:
// В метод сервера передаётся имя желаемого файла и IStream приёмника.
var dsa : TStreamAdapter;
DestSt : TFileStream;
dI : IStream;
begin
DCOMConnection1.Connected := true;
IMySoed := IMyTestZakachDisp(DCOMConnection1.GetServer);
DestSt := TFileStream.Create('D:\Server.exe',fmCreate);
dsa := TStreamAdapter.Create(DestSt);
di := IStream(dsa);
IMySoed.ReadFile('D:\Program Files\Borland\Delphi7\Projects\SecretPipe2\Server\Server.exe', di);
Пример сервера :
procedure TMyTestZakach.ReadFile(FileName: OleVariant; const Param2: IUnknown);
var ssa : TStreamAdapter;
SourceSt : TFileStream;
sI, dI : IStream;
size : int64;
rd, wr : int64;
begin
SourceSt := TFileStream.Create(FileName, fmOpenRead);
ssa := TStreamAdapter.Create(SourceSt);
si := IStream(ssa);
size := ssa.Stream.Size;
di := IStream(Param2);
if si.CopyTo(di, size, rd, wr) = S_OK then ShowMessage('Всё хорошо.');
// Si.Copy вызывает исключение со ссылкой на ole32.dll ????
Подкажите, что можно сделать ?
Приму любую помощью.
Заранее спасибо всем ответившим. С уважением.....
P.S. требуется для перекачки файлов.
Набережных С. (2004-11-27 15:36:00) [1]>Cheburek (15.11.04 20:44)
>procedure TMyTestZakach.ReadFile(FileName: OleVariant; const Param2: IUnknown);
>di := IStream(Param2);
"Как прикажешь тебя понимать, Саид?" Ну я-то ладно, но как это должны понимать Proxy- и StubManager? Как они могут догадаться, что нужно создавать заглушку и заместителя для IStream?
di := Param2 as IStream;]
И, кстати, указатель стрима надо-бы переставить на начало, а?
hexone (2004-11-19 17:48:00) [2]Если необязательно использовать IStream, используй SafeArray
Чебуратор (2004-11-16 11:23:00) [3]Никто не знает чтоли ?