Опять IntToStr...

Тема в разделе "WASM.ASSEMBLER", создана пользователем x3r0n, 17 май 2007.

  1. x3r0n

    x3r0n New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    34
    Всем привет! (=
    В общем есть функция:
    Код (Text):
    1. function IntToStr(Value: Integer): String;
    2. asm
    3.   XOR ECX, ECX
    4.   PUSH ECX
    5.   ADD ESP, -0Ch
    6.   PUSH EBX
    7.   LEA EBX, [ESP + 15 + 4]
    8.   PUSH EDX
    9.   CMP EAX, ECX
    10.   PUSHFD
    11.   JGE @@1
    12.   NEG EAX
    13.   @@1:
    14.   MOV CL, 10
    15.   @@2:
    16.   DEC EBX
    17.   XOR EDX, EDX
    18.   DIV ECX
    19.   ADD DL, 30h
    20.   MOV [EBX], DL
    21.   TEST EAX, EAX
    22.   JNZ @@2
    23.   POPFD
    24.   JGE @@3
    25.   DEC EBX
    26.   MOV byte ptr [EBX], '-'
    27.   @@3:
    28.   POP EAX
    29.   MOV EDX, EBX
    30.   CALL System.@LStrFromPChar
    31.   POP EBX
    32.   ADD ESP, 10h
    33. end; //IntToStr
    Рипнута мной из KOL...
    Она пребразует Integer в String, вопрос такой, как можно переделать этот код так, чтобы вместо типа String, был PChar? (Стринг паскалевский тип, и подключает к программе мэнджер памяти, размер увеличивается)
    Я в асме к сожелению полный 0, поэтому прошу помощи =)
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Вы сами память под строку не выделяете, поэтому и требуется менеждер памяти. Со всеми последствиями.
    Выделите память под строку любым удобным способом и передайте указатель на эту память (буфер для строки) например в функцию wsprintf


    Код (Text):
    1. PCHAR IntToStr(int Value){
    2.     PCHAR    StrAddr;
    3.  
    4.     StrAddr = (PCHAR) HeapAlloc (GetProcessHeap(), HEAP_NO_SERIALIZE, 32);
    5.     wsprintf (StrAddr, "%d", Value);
    6.     return StrAddr;
    7. }
    8.  
    9. MessageBox(NULL, IntToStr(12345), NULL, NULL);
     
  3. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Чем PChar отличается от String?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    PChar - это указатель на String :)
     
  5. x3r0n

    x3r0n New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    34
    cresta спасибо, разобрался =)
     
  6. Miller Rabin

    Miller Rabin New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2006
    Сообщения:
    185
    Дельфийский стринг от PCHAR не отличаются ничем. Такой же указатель на строку.
    За исключением того, что у Дельфийской строки присутствуют еще два параметра
    [Pointer-4] - Это длина строки DWORD
    [Pointer-8] - Это количество ссылок на строку, где Pointer - это собственно указатель на строку