Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

ConvertStrToNetUnicode в функции ошибка   Найти похожие ветки 

 
Dust ©   (2005-08-25 14:17) [0]

тестирование показало, что именно в этом участке кода ошибка
(сама ошибка вылазить значительно позже, спустя 200 а то и 500 строк)
вот текст самой функции


Procedure ConvertStrToNetUnicode (const str : Pchar;var len : byte);
var pwch   : PWORD;
   tmpstr : String;
   ln     : Integer;
begin //конвертирует строку для отправки в Unicode кодировке  Src-String должна содержать len*2 байт
len:=len shl 1;
pwch := Pointer(str);
StringToWideChar(str, PWideChar(pwch), len);

for ln := len-1 downto 0 do
begin
 pwch^:= htons(pwch^);
 inc (pwch);
end;
end;

//****************************
она вызывается вот в этом участке :
.........
ab[9]:=length(tmpstr); //sm_length
if fUnicode then
 begin
 ab[7]:=$08; //data_coding
 SetLength (tmpstr, ab[9]*2+2);
 ConvertStrToNetUnicode (Pchar(tmpstr), ab[9]); //SETS sm_length
 end;
.........

tmpstr - локально описанная строка типа String


 
Dust ©   (2005-08-25 14:25) [1]

всё, кажется нашёл, точнее кажется понял

Procedure ConvertStrToNetUnicode (const str : Pchar;var len : byte);
var pwch   : PWORD;
   tmpstr : String;
   ln     : Integer;
begin //конвертирует строку для отправки в Unicode кодировке  Src-String должна содержать len*2 байт
len:=len shl 1;
pwch := AllocMem (ln);   //Pointer(str);
StringToWideChar(str, PWideChar(pwch), len);

for ln := len-1 downto 0 do
begin
 pwch^:= htons(pwch^);
 inc (pwch);
end;
Move (pwch^, Pointer(str)^, len);
FreeMemory(pwch);
end;


 
Dust ©   (2005-08-25 15:00) [2]

прошу прощенья... опять ошибка


 
han_malign ©   (2005-08-25 15:26) [3]

Procedure ConvertStrToNetUnicode (const str : Pchar;var len : byte);
var pwch   : PWORD;
  tmpstr : String;
  ln     : Integer;
begin //конвертирует строку для отправки в Unicode кодировке Src-String должна содержать len*2 байт
  len:=len shl 1;
  pwch := Pointer(str);
  StringToWideChar(str, PWideChar(pwch), len);

  for ln := len-1 downto 0 do
  begin
    pwch^:= htons(pwch^);
    inc (pwch);
  end;
end;
- inc (pwch) <==> PChar(pwch) = PChar(pwch)+2; а при этом len = len shl 2;

вторая версия:
pwch := AllocMem (ln); - ln не инициализировано...
да и лишнее это - память выделяется при создании временной AnsiString при передаче str в StringToWideChar...


 
han_malign ©   (2005-08-25 15:29) [4]

блин, тэг не закрыл... и с цифрами напутал - короче, внимательней к глобально(в области видимости) изменяемым длинам относись.


 
Dust ©   (2005-08-25 18:32) [5]

inc (pwch) <==> PChar(pwch)
это единственная ошибка которая оставалась
Procedure ConvertStrToNetUnicode (const str : Pchar;var len : byte);
var pwch   : PWORD;
   tmpstr : String;
   ln     : Integer;
   p2     : Pointer;
begin //&#234;&#238;&#237;&#226;&#229;&#240;&#242;&#232;&#240;&#243;&#229;&#242; &#241;&#242;&#240;&#238;&#234;&#243; &#228;&#235;&#255; &#238;&#242;&#239;&#240;&#224;&#226;&#234;&#232; &#226; Unicode &#234;&#238;&#228;&#232;&#240;&#238;&#226;&#234;&#229;  Src-String &#228;&#238;&#235;&#230;&#237;&#224; &#241;&#238;&#228;&#229;&#240;&#230;&#224;&#242;&#252; len*2 &#225;&#224;&#233;&#242;
len:=len shl 1;
pwch := AllocMem (ln);   //Pointer(str);
StringToWideChar(str, PWideChar(pwch), len);
p2:= Pointer(pwch);
for ln := len-1 downto 0 do
begin
 pwch^:= htons(pwch^);
 inc (pwch);
end;
Move (p2^, str^, len);
FreeMemory(pwch);
end;


 
Dust ©   (2005-08-25 18:32) [6]

былин..
долбаная винда с её юникодом...


 
Джо ©   (2005-08-25 18:35) [7]


>  [6] Dust ©   (25.08.05 18:32)
> долбаная винда с её юникодом...

А виновата, как всегда, "Винда".


 
Dust ©   (2005-08-25 19:05) [8]

pwch :=p2;
FreeMemory(pwch);



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

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
2-1123826523
syte_ser78
2005-08-12 10:02
2005.09.18
Почему и как исправить?


14-1124434556
boriskb
2005-08-19 10:55
2005.09.18
"Научная" реформа


9-1116839722
Шухрат
2005-05-23 13:15
2005.09.18
плагины unwrap3d 2.15


14-1124445799
kaif
2005-08-19 14:03
2005.09.18
Screen shot или screenshot ? Как правильно?


14-1123672574
Layner
2005-08-10 15:16
2005.09.18
torry повис