Главная страница
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.05 c
1-1084537209
Goida
2004-05-14 16:20
2004.05.30
Многомерные динамические массивы


3-1083579432
vunder
2004-05-03 14:17
2004.05.30
сохранение картинки в базе Paradox


4-1081943026
Сережа550
2004-04-14 15:43
2004.05.30
Сложная имитация клика левой кнопкой мышки в нужном окне


14-1083159353
SeriousSam
2004-04-28 17:35
2004.05.30
Помогите выбрать комп


6-1081295507
juggler
2004-04-07 03:51
2004.05.30
IEParser и событие OnNewWindow2