|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
Который после
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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 RET je - Если флаг нуля установлен, то идем на обработчик ошибки, а если нет - идем на 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] Если интересует дальнейшее обсуждение - либо во флейм (предпочтительно), либо в личку. Или можно попросить админов перенести все эти изыскания во флейм. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 04.05.2012 в 19:24. |
#19
|
||||
|
||||
Господа, вам не кажется, что вы несколько ушли от темы и обсуждать ее надо явно не тут?
Что касается вопроса, как положить в массив. Я вам дал код в результате выполнения которого вы и получите массив строк в свойстве SL.Strings или Memo1.Lines. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |