Главная страница
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.051 c
14-1083991656
Korneley
2004-05-08 08:47
2004.05.30
Как посчитать расстояние в метрах по географическим координатам?


6-1081688965
LORDMAXX
2004-04-11 17:09
2004.05.30
Узнать размер файла по FPT компонент MFtp1


7-1082701455
Igor_
2004-04-23 10:24
2004.05.30
Чтение LPT


14-1084001250
infom
2004-05-08 11:27
2004.05.30
Про шахматы


6-1081799593
DED_MustDie
2004-04-12 23:53
2004.05.30
non-blocking