Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2013, 19:03   #1
dkfl10011
 
Регистрация: 07.03.2013
Сообщений: 5
Сообщение PointerToRecord

Здрасте,
у меня возникла проблема, мне нужно преобразовать Pointer в структуру, но подобных функций я не нашёл, а функция преобразования <структура>(pointer) не работает.

Код:
function Test(a:TLuaArg):TLuaArg;
var R:TRect; Record:TLuaRecord;
begin
  Record:=a.ForceRecord;

{ Record.Data:=<Pointer record>
   Record.Info=<неважно>    }

   R:=Record.Data //Как получить саму структуру?
end;

Последний раз редактировалось dkfl10011; 07.03.2013 в 19:06. Причина: Ошибка
dkfl10011 вне форума Ответить с цитированием
Старый 07.03.2013, 19:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а функция преобразования <структура>(pointer) не работает.
Как ругается?
Покажи структуру TLuaRecord
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.03.2013, 19:42   #3
dkfl10011
 
Регистрация: 07.03.2013
Сообщений: 5
По умолчанию

компилятор пишет "Invalid typecast"
Код:
//Кусок кода из CrystalLUA 

  // базовая структура для хранения ссылок на структуры, массивы и множества (Set)
  // используется внутри TLuaArg
  __lua_difficult_type__ = object
  protected
    {$hints off}align: array[0..1] of byte; {FLuaType = ?, align[0]} {$hints on}
    FIsRef: boolean;
    FIsConst: boolean;
  public
    Data: pointer;
    { info: information type }
    property IsRef: boolean read FIsRef write FIsRef;
    property IsConst: boolean read FIsConst write FIsConst;
  end;

  // взаимодействие по структурам между lua и программой
  PLuaRecordInfo = ^TLuaRecordInfo; // описание TLuaRecordInfo внизу из-за завязки на TLuaClassProc
  TLuaRecord = object(__lua_difficult_type__)
  public
    Info: PLuaRecordInfo;
  end;
Record.Data хранит в себе pointer структуру, на стороне люа, всё работает нормально, но мне нужно как то получить эту структуру на нативной стороне.
dkfl10011 вне форума Ответить с цитированием
Старый 07.03.2013, 19:54   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

<структура>(pointer^)
не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.03.2013, 20:00   #5
dkfl10011
 
Регистрация: 07.03.2013
Сообщений: 5
По умолчанию

спасибо, всё работает, но можно как-то объяснить(или дать ссылку на статью) про значение "^" и nil^?
dkfl10011 вне форума Ответить с цитированием
Старый 07.03.2013, 20:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Циркумфлекс означает разименовку указателя.
Т.е. Pointer^ вытаскивает данные, на которые указатель показывает, а тип() уже приводит их к нужному типу.
Это во всех учебниках паскаля классического описано, любой возьми и почитай про разименовывание указателей.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц