Можно ли преобразовать следующий код?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Можно ли преобразовать следующий код?

Сообщение BadBoyAlex » 30.04.2011 15:44:15

Искал нормальный lzma упаковщик/распаковщик для Lazarus'а, но таких не нашлось. Пришла идея использовать то, что в Delphi хорошо себя зарекомендовала, но столкнулся с проблемой перевода:
оригинал: автор Henri Gourvest, http://www.progdigy.com/?page_id=13

Преобраз. с помощью "Сервис -> Преобр. модуль Delphi в Lazarus -> Lazarus для Windows"
Код: Выделить всё
procedure SetCardinalProperty(arch: I7zOutArchive; const name: UnicodeString; card: Cardinal);
var
  value: OleVariant;
begin
  -> TPropVariant(value).vt := VT_UI4;
  -> TPropVariant(value).ulVal := card;
  arch.SetPropertie(name, value);
end;

function T7zCodec.GetDecoder(const index: integer): ICompressCoder;
var
  v: OleVariant;
begin
  v := MethodProperty[index, kDecoder];
  -> CreateObject(TPropVariant(v).puuid^, ICompressCoder, Result);
end; 

function T7zCodec.GetEncoder(const index: integer): ICompressCoder;
var
  v: OleVariant;
begin
  v := MethodProperty[index, kEncoder];
  -> CreateObject(TPropVariant(v).puuid^, ICompressCoder, Result);
end;

function T7zArchive.GetLibGUIDProperty(const Index: NArchive): TGUID;
var
  v: OleVariant;
begin
  v := HandlerProperty[index];
  -> Result := TPropVariant(v).puuid^;
end;

function T7zOutArchive.GetProperty(index: Cardinal; propID: PROPID;
  var value: OleVariant): HRESULT;
var
  item: T7zBatchItem;
begin
  item := T7zBatchItem(FBatchList[index]);
  case propID of
    kpidAttributes:
      begin
        -> TPropVariant(Value).vt := VT_UI4;
        -> TPropVariant(Value).ulVal := item.Attributes;
      end;
    kpidLastWriteTime:
      begin
        -> TPropVariant(value).vt := VT_FILETIME;
        -> TPropVariant(value).filetime := item.LastWriteTime;
      end;
    kpidPath:
      begin
        if item.Path <> '' then
          value := item.Path;
      end;
    kpidIsFolder: Value := item.IsFolder;
    kpidSize:
      begin
        -> TPropVariant(Value).vt := VT_UI8;
        -> TPropVariant(Value).uhVal.QuadPart := item.Size;
      end;
    kpidCreationTime:
      begin
        -> TPropVariant(value).vt := VT_FILETIME;
        -> TPropVariant(value).filetime := item.CreationTime;
      end;
    kpidIsAnti: value := item.IsAnti;
  else
   // beep(0,0);
  end;
  Result := S_OK;
end;

procedure T7zOutArchive.SetPropertie(name: UnicodeString;
  value: OleVariant);
var
  intf: ISetProperties;
  p: PWideChar;
begin
  intf := OutArchive as ISetProperties;
  p := PWideChar(name);
  -> RINOK(intf.SetProperties(@p, @TPropVariant(value), 1));
end;


При компиляции грешит на
Код: Выделить всё
TPropVariant(value).filetime := item.LastWriteTime;

с ошибкой "sevenzip.pas(1535,9) Error: Illegal type conversion: "OleVariant" to "<record type>"". И это не одна такая ошибка. Вопрос: преобразуем ли этот модуль. Если да, то как...

Для удобства даны полностью процедуры (функции), а значком "->" помечено, на что жалуется...
Последний раз редактировалось BadBoyAlex 30.04.2011 17:34:09, всего редактировалось 1 раз.
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Можно ли преобразовать следующий код?

Сообщение Little_Roo » 30.04.2011 17:23:59

За ТАКОЕ наверно нужно просто убивать...морально...или интеллектуально

А вглядываться в данную текстуху .... ну, великие гуру меня, наверное, поддержат -
что будет, если для обнаружения микро-глюка публиковать 5-10 тысяч строк исходника (который не всегда и открытый)
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Можно ли преобразовать следующий код?

Сообщение BadBoyAlex » 30.04.2011 17:27:51

Little_Roo писал(а):За ТАКОЕ наверно нужно просто убивать...морально...или интеллектуально

Что же сразу убивать-то? Я понял свою ошибку... сейчас исправлю... =)
Кстати, уже подправлено.
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Можно ли преобразовать следующий код?

Сообщение Sergei I. Gorelkin » 30.04.2011 22:08:58

Преобразовывать модуль не надо. Была ошибка в модуле activex, исправлена в ревизии 17387.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Можно ли преобразовать следующий код?

Сообщение BadBoyAlex » 30.04.2011 22:47:04

Sergei I. Gorelkin писал(а):Преобразовывать модуль не надо. Была ошибка в модуле activex, исправлена в ревизии 17387.

Да и с не преобразованным также... Ревизия 17387 - это ревизия Lazarus'а? У меня версия 0.9.30 (ревизия SVN: 29749)...
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Можно ли преобразовать следующий код?

Сообщение Sergei I. Gorelkin » 30.04.2011 23:55:08

17387 - номер ревизии FPC. Lazarus тут не влияет.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Можно ли преобразовать следующий код?

Сообщение BadBoyAlex » 01.05.2011 00:41:48

Sergei I. Gorelkin писал(а):17387 - номер ревизии FPC. Lazarus тут не влияет.

Сейчас скачал версию lazarus 0.9.31 (со Snapshot) там FPC 2.4.3 от 30.04.2011. Всё равно там и останавливается...
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Можно ли преобразовать следующий код?

Сообщение Максим » 01.05.2011 01:32:47

Вам нужен FPC версии 2.5.1 ревизии 17387 либо выше.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: Можно ли преобразовать следующий код?

Сообщение BadBoyAlex » 01.05.2011 09:41:11

Максим писал(а):Вам нужен FPC версии 2.5.1 ревизии 17387 либо выше.

Пожалуйста, скиньте ссылку, где можно взять его рабочий вариант с исходными кодами (но только exe!), пробовал snapshots на freepascal.org, но ничего не получилось та же ошибка, а FPC нормально не ставится (точнее я не знаю, как его поставить!)

Вот переместил я с заменой из fpcbuild.zip, а дальше-то что? А в Lazarus отображается компилятор в. 2.4.2
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Можно ли преобразовать следующий код?

Сообщение Максим » 02.05.2011 03:30:52

Возьмите здесь. Ну и исходный код здесь. Все эти ссылки лежат на http://www.freepascal.org, неужели так сложно найти?
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: Можно ли преобразовать следующий код?

Сообщение Nik » 02.05.2011 11:54:18

2BadBoyAlex

Подробная инструкция по замене компилятора: http://lazarus.su/other/lazarus-fpc-2-5-1.html
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Можно ли преобразовать следующий код?

Сообщение BadBoyAlex » 03.05.2011 10:39:09

Кто-нибудь может выложить эти архивы, например, на narod, а то к ФТП уже второй день нет доступа...
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

Рейтинг@Mail.ru