Привет, это опять автор вопроса
Спасибо тем,кто ответил
Оба способа опробованы, но результата не дали
2Shtirliz
Stream.Clear;
Stream.SetSize(Count);
CopyMemory(Stream.memory,@buffer,Count);
Такой вариант тоже не работает, в том смысле, что получаются не те данные. Для отладки был написан COM-клиент на Delphi и выяснилось, что, в принципе, работает следующий вариант:
type
TBArray = array of byte;
var
BufArray: TBArray;
begin
...
SetLength(BufArray, Count);
DynArrayFromVariant(Pointer(BufArray), Buffer, TypeInfo(TBArray));
Stream.Clear;
Stream.SetSize(Count);
CopyMemory(Stream.memory,BufArray,Count);
...
но если COM-клиентом выступает ASP-скрипт при вызове
DynArrayFromVariant(Pointer(BufArray), Buffer, TypeInfo(TBArray));
происходит AV.
Почему — не понятно
VarIsArray(Buffer) возвращает true.
2Аноним:
при вызове COM-объекта из Delphi предложенный тобой вариант работает:
if (VarIsArray(Buffer)) then
begin
a := FindVarData(Buffer);
Stream.Write(a^.VArray^.Data^, Count);
end;
но при вызове из ASP-скрипта
a^.VArray = nil
почему — опять же непонятно
Вобщем, если у кого-нибудь будут какие-нить идеи — очень прошу, помогите
Второй день над этим сижу, намучилась донельзя