Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

Передача битовой строки   Найти похожие ветки 

 
Тормоз   (2002-09-12 08:02) [0]

Здравствуйте
Кто-нибудь знает как передать с сервера на клиент, ну например, картинку БМП. Вообще-то мне нужно передать сгенерированный отчет.
Пробовал передать в формате WideString - не получается, до клиента доходит всего 3 символа. Я так понимаю что передается только часть строки до #0
Подскажите, как быть.
Заранее спасибо


 
A. N. Onim   (2002-09-12 10:04) [1]

А ты давай в SAFEARRAY, а что за отчёт, если в XML, то лучше по HTTP.


 
Тормоз   (2002-09-12 11:26) [2]

Отчет в FastReport, я его формирую на севере и передаю на клиента. Из себя он представляет неперевариваемую информацию ~100k.
Сейчас я сделал так: побайтно заношу его в VariantArray, а на клиенте собираю обратно в одну строку типа string и дальше уже преобразовываю.
Так вот вопрос - существует ли более простой способ передачи двоичной информации (ну например из TMemoryStream)?


 
Тормоз   (2002-10-01 05:51) [3]

Здравствуйте.
Я сделал примерно как у KA_ - все работает довольно быстро.
По поводу способа Олега Лаукарта: я не понял, зачем затруднять себя передачей HEX-кодов. К тому же, для передачи одного байта информации вы используете два байта кодовой строки.

зы: Прошу прощения, если не то ляпнул


 
KA_   (2002-10-01 10:08) [4]

Вообще-то в моем случае используется тип any, что само по себе тормозит работу сиситемы. Если передаваемый файлы (или не файлы) все примерно одинакового размера, то можно вместо any использовать массив определив максимальный размер передаваемой информации. А при передаче обрезать его по длине outlen. Тогда по идее скорость должна возрости.


 
Тормоз   (2002-10-01 11:42) [5]

А как можно передать массив?
Я если честно - чайник в таких технологиях, но сколько я читал статей, в них сказано, что массивы передаются в вариантах, которые сродни Any. Или я не прав?


 
Набережных С.   (2002-10-01 20:50) [6]


function GetVarArray(Data: Pointer; Len: integer):variant;
var
 P:PInteger;
begin
 Result:=VarArrayCreate([0,Len+SizeOf(Len)],varByte);
 P:=VarArrayLock(Result);
 P^:=Len;
 Inc(P);
 CopyMemory(P,Data,Len);
 VarArrayUnlock(Result);
end;

function GetByteArray(const V: Variant; out Len: Integer):Pointer;
var
 P:PInteger;
begin
 P:=VarArrayLock(V);
 Len:=P^;
 GetMem(Result,Len);
 Inc(P);
 CopyMemory(Result,P,Len);
 VarArrayUnlock(V);
end;

Пример:

var
 v:variant;

procedure TForm1.Button3Click(Sender: TObject);
var
 s:string;
begin
 s:="Hello, Тормоз!"#0;
 v:=GetVarArray(@s[1],Length(s));
end;

procedure TForm1.Button4Click(Sender: TObject);
var
 P:PChar;
 n:integer;
begin
 Pointer(P):=GetByteArray(V,n);
 v:=Unassigned;
 ShowMessage(IntToStr(n));
 ShowMessage(P);
 FreeMem(P);
end;

P.S. Только добавь проверки, защищенные блоки и т.п.


 
Олег Лаукарт ©   (2002-10-07 10:18) [7]

Относительно мороки с перекодированием в текст и т.д. Я использовал для передачи уже откатанный в системе механизм передачи справочников, которые представляют из себя XML документы. Не хотелось создавать новый механизм лишь для того, чтобы передавать бинарные шаблоны,так как они в моей ситуации были лишь одной из составляющих передаваемого информационного пакета. Поэтому пришлось пойти на удвоение объема с целью сокращения затрат на реализацию функциональности.
Если размеры передаваемых данных велики, частота отправки тоже большая и нет других ньюансов, то стоит использовать Any и т.п. Предложенный мною способ дан для расширения перечня возможных способов.
Удачи.



Страницы: 1 вся ветка

Форум: "Corba";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.032 c
14-1091940469
Григорьев Антон
2004-08-08 08:47
2004.08.29
Нужно ли бороться с хинтами и ворнингами?


1-1092160559
4МО
2004-08-10 21:55
2004.08.29
Реестр


1-1092298386
Ренат
2004-08-12 12:13
2004.08.29
Загрузить .gif файл


14-1091988495
Cerberus
2004-08-08 22:08
2004.08.29
Я Робот.


1-1092278216
Максим
2004-08-12 06:36
2004.08.29
Ecxel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский