Главная страница
    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.011 c
3-1122994415
wqer
2005-08-02 18:53
2005.09.18
ORACLE odac


2-1123680070
Radgar
2005-08-10 17:21
2005.09.18
TChart


14-1124650406
VictorT
2005-08-21 22:53
2005.09.18
Просьба.


3-1123063665
_Lucky_
2005-08-03 14:07
2005.09.18
Организация доступа к БД и средства администрирования БД


5-1099673282
gigabyte
2004-11-05 19:48
2005.09.18
ValueListEditor





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