Показать сообщение отдельно
  #10  
Старый 16.04.2012, 17:53
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Мдя.
Цитата:
^ @ Pointer() string()
Первые две - это не функции, а указания компилятору, использовать значение по адресу и адрес соответственно. Если прям такая ненависть к ним - вперёд:
Код:
asm
; a^:=b
; скомпилируется в
 mov eax, a       ; eax := a
 mov ebx, b       ; ebx :=b 
 mov [eax], ebx  ; eax^ := ebx
;---------------
; a:=@b
; скомпилируется в
 mov eax, offset b
 mov a, eax
end;
Pointer и String так вообще указания компилятору, что работать с переменной как с таким типом. После компиляции ни строк, ни интов не существует.
Цитата:
ну и как же она преобрзовывает тогда?
Да очень просто: никак. Если смотреть вглубь, в подавляющем большинстве случаев преобразование типов просто отключает ошибки, выдаваемые компилятором. Всё сведётся к
Код:
p:=PChar(s);
// получим:
asm
 mov eax, s   // s - строка
 mov p, eax   // p - указатель
end;
Только при использовании ООП с перегрузкой преобразований будет вызываться функция преобразования (например, в Delphi 2009 и выше при преобразовании String в AnsiString и наоборот).
Причём тут функции DLL Windows вообще не понял: это функции для реализации элементов работы с операционной системой.

Так что задача полностью лишена смысла. Работать оно будет на любом компьютере архитектуры х86, вообще без операционной системы. Неиспользование ^ и @ - это просто исключение из рассмотрения части машинных команд, которые реализованы везде и всегда. Кстати, даже простой доступ к переменной фактически реализуется через ту же ^, только перед ней стоит константа (адрес, который скрывается за именем переменной), и эту ^ делфи писать не требует, ставит сама.

З.Ы. если можно использовать интежер и стринг - то вообще без проблем:
Код:
var p: pointer;
     s: string;
     
begin
// p уже указывает на строку
 integer(s):=integer(p);  // поскольку строка и есть указатель на строку
end;

З.З.Ы. Интересно, откуда взялась такая бредовая задача. Если какой-то препод поставил - то передайте ему, чтоб не учил людей всякой дури и быдлокоду. Она только развивает неверное представление о спецсимволах и приведении типов в делфи.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием