![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
||||
|
||||
|
Который после
Цитата:
Там и посмотри строку. Около адреса, который перед записью в S (@LStrAsg) кладётся в edx. На её конце - ноль. Никакого магического преобразования нет, результатом вызываемой функции _LStrToPChar является Pointer(s). Сделана эта функция только для возможной будущей переработки самого механизма строк, которой на деле скорее всего не будет.Последний раз редактировалось Bargest, 04.05.2012 в 19:03. |
|
#17
|
|||
|
|||
|
а в моем примере и нет никакого преобразования вообще (0 в конце не вижу) !
_LStrToPChar из систем вообще не факт что идентичен LStrToPChar из прилинкованых obj файлов и у меня она выглядит так Код:
function _LStrToPChar(const s: AnsiString): PChar;
{$IFDEF PUREPASCAL}
const
EmptyString = '';
begin
if Pointer(s) = nil then
Result := EmptyString
else
Result := Pointer(s);
end;
{$ELSE}
asm
{ -> EAX pointer to str }
{ <- EAX pointer to PChar }
TEST EAX,EAX
JE @@handle0
RET
{$IFDEF PIC}
@@handle0:
JMP PICEmptyString
{$ELSE}
@@zeroByte:
DB 0
@@handle0:
MOV EAX,offset @@zeroByte
{$ENDIF}
end;
{$ENDIF}да и вообще у меня 7 делфя а у тебя ХЕ ![]() |
|
#18
|
||||
|
||||
|
Неверная интерпретация кода.
Код:
asm
{ -> EAX pointer to str }
{ <- EAX pointer to PChar }
TEST EAX,EAX
JE @@handle0
RETje - Если флаг нуля установлен, то идем на обработчик ошибки, а если нет - идем на ret, т.е. выходим. В итоге eax никто не меняет, если он не равен нулю (нормальная строка). DB 0 - не команда, а видимо выравнивание. Если присмотреться, на него процессор никогда не попадёт. Ну и еще он используется в одном из варинатов обработки ошибок, наверное, как PChar нулевой длины. И еще доказательство: Код:
var s: AnsiString;
p: PAnsiChar;
Begin
s:='123'#0'456';
p:=PAnsiChar(s);
ShowMessage(inttostr(DWORD(s))+' '+inttostr(DWORD(p)));
end.[UPDATE] Если интересует дальнейшее обсуждение - либо во флейм (предпочтительно), либо в личку. Или можно попросить админов перенести все эти изыскания во флейм. Последний раз редактировалось Bargest, 04.05.2012 в 19:24. |
|
#19
|
||||
|
||||
|
Господа, вам не кажется, что вы несколько ушли от темы и обсуждать ее надо явно не тут?
Что касается вопроса, как положить в массив. Я вам дал код в результате выполнения которого вы и получите массив строк в свойстве SL.Strings или Memo1.Lines. |