Всем привет! (= В общем есть функция: Код (Text): function IntToStr(Value: Integer): String; asm XOR ECX, ECX PUSH ECX ADD ESP, -0Ch PUSH EBX LEA EBX, [ESP + 15 + 4] PUSH EDX CMP EAX, ECX PUSHFD JGE @@1 NEG EAX @@1: MOV CL, 10 @@2: DEC EBX XOR EDX, EDX DIV ECX ADD DL, 30h MOV [EBX], DL TEST EAX, EAX JNZ @@2 POPFD JGE @@3 DEC EBX MOV byte ptr [EBX], '-' @@3: POP EAX MOV EDX, EBX CALL System.@LStrFromPChar POP EBX ADD ESP, 10h end; //IntToStr Рипнута мной из KOL... Она пребразует Integer в String, вопрос такой, как можно переделать этот код так, чтобы вместо типа String, был PChar? (Стринг паскалевский тип, и подключает к программе мэнджер памяти, размер увеличивается) Я в асме к сожелению полный 0, поэтому прошу помощи =)
Вы сами память под строку не выделяете, поэтому и требуется менеждер памяти. Со всеми последствиями. Выделите память под строку любым удобным способом и передайте указатель на эту память (буфер для строки) например в функцию wsprintf Код (Text): PCHAR IntToStr(int Value){ PCHAR StrAddr; StrAddr = (PCHAR) HeapAlloc (GetProcessHeap(), HEAP_NO_SERIALIZE, 32); wsprintf (StrAddr, "%d", Value); return StrAddr; } MessageBox(NULL, IntToStr(12345), NULL, NULL);
Дельфийский стринг от PCHAR не отличаются ничем. Такой же указатель на строку. За исключением того, что у Дельфийской строки присутствуют еще два параметра [Pointer-4] - Это длина строки DWORD [Pointer-8] - Это количество ссылок на строку, где Pointer - это собственно указатель на строку