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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
14-1124442813
MadAngel
2005-08-19 13:13
2005.09.18
А где?


2-1123725034
Проэкт
2005-08-11 05:50
2005.09.18
Как называется такая конструкция?


9-1116429171
new1
2005-05-18 19:12
2005.09.18
Smd Export From 3dsmax5 Plugin


14-1124859709
IfBeginThenEnd
2005-08-24 09:01
2005.09.18
Режим ядра


2-1123763262
Radgar
2005-08-11 16:27
2005.09.18
ComboBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский