Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Объект как var параметр ф-ции   Найти похожие ветки 

 
NetworK ©   (2004-05-20 13:21) [0]

Добрый день!
Скачал одну либу по работе со SCSI & ASPI интерфейсами с сайта torry.net. Вместе с ней идет пример работы. Но, когда я вытаюсь все это скомпилить мне выдается ошибка на вызов одной из функций:
Constant object cannot be passed as var parametr. Не могу понять в чем проблема. Кривой исходник или....
В описании библиотеки было написано, что она написана для Дельфи3-5. У меня 6. Может ли быть дело именно в этом? Если да, то как быть?

Спасибо всем откликнувшимся.


 
Ega23 ©   (2004-05-20 13:26) [1]

Функцию в студию!


 
NetworK ©   (2004-05-20 14:07) [2]

Вызов происходит так:

Result := not AspiCheck(SCSImodeSense(DID, $3F, @ModeSenseBuf, 255, SCSI_DEF));

Используемые переменные и константы описаны так:

const
      SCSI_DEF : TScsiDefaults =
     (Timeout        : 1000;
      ReadTimeout    : 10000;
      AudioTimeout   : 10000;
      SpindleTimeout : 10000;
      fOnCommandSending : nil;
      fOnCommandSent    : nil;
      ModePageType   : MPTcurrent;
      Sense : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));

var
  ModeSenseBuf : array[0..255] of BYTE;
  DID      : TDeviceID;


Описана она в модуле так:

function SCSImodeSense(DeviceID : TdeviceID;
                PAGE : BYTE; Buf : pointer; BufLen : DWORD;
                var Sdf : TScsiDefaults) : TScsiError;

Если что еще, говорите, напишу


 
Reindeer Moss Eater ©   (2004-05-20 14:10) [3]

function SCSImodeSense(DeviceID : TdeviceID;
               PAGE : BYTE; Buf : pointer; BufLen : DWORD;
               var Sdf : TScsiDefaults) : TScsiError;

const      SCSI_DEF : TScsiDefaults =
    (Timeout        : 1000;.....

Вызов происходит так:

Result := not AspiCheck(SCSImodeSense(DID, $3F, @ModeSenseBuf, 255, SCSI_DEF));


Ну и что же мы хотели?
Время констант, которым можно было присваивать значения прошло давно.


 
NetworK ©   (2004-05-20 14:17) [4]

И как быть? Переписывать всю либу линиво, есть какой-нибудь выход? И что в Д5 это прокатывало?


 
Ega23 ©   (2004-05-20 14:19) [5]

Заведи переменную, например,
MySCSI_DEF : TScsiDefaults;
Приравняй её константе SCSI_DEF :
MySCSI_DEF := SCSI_DEF;
А потом передавай её в качестве параметра в SCSImodeSense :

Result := not AspiCheck(SCSImodeSense(DID, $3F, @ModeSenseBuf, 255, MySCSI_DEF));


 
Reindeer Moss Eater ©   (2004-05-20 14:19) [6]

Что бы не переписвыать "всю либу", попробуй подумать, может можно переписать одно слово?


 
Smithson ©   (2004-05-20 14:20) [7]

Создать еще один объект того типа TScsiDefaults, присвоить ему значение SCSI_DEF и его-то и передать в функцию.


 
Ega23 ©   (2004-05-20 14:21) [8]

Reindeer Moss Eater ©   (20.05.04 14:19) [6]
Это ты про var?


 
Ega23 ©   (2004-05-20 14:21) [9]

Smithson ©   (20.05.04 14:20) [7]
ОБЪЕКТ????!?!?!?


 
NetworK ©   (2004-05-20 14:22) [10]

:) Спасибо



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
14-1084259698
Ega23
2004-05-11 11:14
2004.05.30
Сразу вопрос. Правда по VC++ :o)


14-1084437435
Романов Р.В.
2004-05-13 12:37
2004.05.30
Никто не обратил внимания?


1-1084650536
LORDMAXX
2004-05-15 23:48
2004.05.30
Как сделать чтоб OpenDialog не выходил за пределы директории


1-1084968513
AlexDM
2004-05-19 16:08
2004.05.30
Как программно заставить выпасть список в ValueListEditor e?


9-1075881456
D@rk
2004-02-04 10:57
2004.05.30
TextOut Без BackGround в DirectX