Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не знаю как сделать.Функция доканает ! [D5, D6, D7, D2005]


StasStas ©   (2005-11-03 23:59:00) 

Уважаемы профессионалы Delphi.

Нужна помощь !
Внизу пример исходного текста программы.
Как прочесть массив данных указанной ниже экспортной функцией.
Как не пытаюсь пишет неверные типы  и тому подобное ....
Понимаю для вас это азы , для меня тупик

------------------------------------------------------------------------------------------------------------------------ --------------------------------
{структура}

PConGroup = ^TConGroup;
TConGroup = record
  group                 : array [0..15] of char;  // group name
  enable                : integer;                // enable group
  timeout               : integer;                // trade confirmation timeout (seconds)
end;
PAConGroup = ^TAConGroup;
TAConGroup = array [0..0] of TConGroup;

{функция}
{total - количество прочтения записей , если 0 то все}
function  CfgRequestGroup(total:pinteger):PAConGroup;           stdcall;

procedure TForm1.Button1Click(Sender: TObject);
var
conf  : TConGroup;
kol:pinteger;
begin

 ZeroMemory(@conf,SizeOf(conf));
 
 {необходимо прочитать массив данных из функции CfgRequestGroup , отдельно каждый элемент что бы дернуть можно было}
 {делал так
 conf:=CfgRequestGroup(@kol);
 компилятор выругался и послал подальше , как сделать ?????
 }

end;

------------------------------------------------------------------------------------------------------------------------ --------------------------------


StasStas   (2005-11-04 12:29:00) [1]

Все заработала как надо , но массив виден если только ставлю вместо :
TAConGroup = array [0..0] of TConGroup;

ставлю
TAConGroup = array [0..110] of TConGroup;

тогда читаю массив , но массив больше 500 , ставлю например 500 или больше Delphi вылетает с надписью
Access violation ...

Ставлю обратно 110 или меньше работает , больше 110 вылетает.
Та структура что в примере маленькая , а по настоящему она немеренная из 25 полей , и ресурсов , наверное не хватает.
То ли ей надо как то память выделить (через GetMem никак) , то ли как то по другому массив обрабатывать


Плохиш   (2005-11-04 11:13:00) [2]


> StasStas   (04.11.05 07:40) [17]
> Функция требует pinteger.
> Если убираю собачку , компилятор не пропускает пишет , что
> нужно pinteger , а не integer.

В [16] собачка нужна!


StasStas   (2005-11-04 07:40:00) [3]

Функция требует pinteger.
Если убираю собачку , компилятор не пропускает пишет , что нужно pinteger , а не integer.

Спасибо всем , попал на тот форум где именно класные спецы сидят.
Редко , кто поможет , а тут другое дело.


Плохиш   (2005-11-04 01:11:00) [4]


> Плохиш ©   (04.11.05 01:02) [12]

Фи, следует читать:

procedure TForm1.Button1Click(Sender: TObject);
var
conf  : PAConGroup;
kol: integer;
i:integer;
begin
ZeroMemory(@conf,SizeOf(conf));
conf:=CfgRequestGroup( @kol);
for i := 0 {?} to koldo
  with conf^[i] do (*  чёта делаем с полученными данными *)
end;

или распределять память для kol из [12] ;-)


Плохиш   (2005-11-04 01:08:00) [5]


> StasStas   (04.11.05 00:59) [10]
>
> > >  conf:=CfgRequestGroup(@kol);
> >
> > Собачку надо убрать.
>
>
> не @ пропускает ...

А подумать? Ты передаёшь адрес указателя, хотя функция требует адрес переменной типа integer.


злобная танька   (2005-11-04 01:06:00) [6]


> StasStas   (04.11.05 00:59) [10]
> не @ пропускает ...

пропускает ну и шо?
зачем этой функции указатель на указатель?
усё правильно, собачку надо убрать.


StasStas   (2005-11-04 01:04:00) [7]

Спасибо , буду пробывать ...


Плохиш   (2005-11-04 01:02:00) [8]


> StasStas   (04.11.05 00:57) [9]
> Пишет несоответствие TConGroup и PAConGroup

Телепатор говорит:

PAConGroup = ^TAConGroup;
TAConGroup = array [0..0] of TConGroup;

{функция}
{total - количество прочтения записей , если 0 то все}
function  CfgRequestGroup(total:pinteger):PAConGroup;           stdcall;

procedure TForm1.Button1Click(Sender: TObject);
var
conf  : PAConGroup;
kol:pinteger;
i:integer;
begin
 ZeroMemory(@conf,SizeOf(conf));
 conf:=CfgRequestGroup(kol);
 for i := 0 {?} to kol^ do
   with conf^[i] do (*  чёта делаем с полученными данными *)
end;


StasStas   (2005-11-04 01:02:00) [9]


> > Zeqfreed ©   (04.11.05 00:51) [5]
>
> чего тут думать.. эту функцию дурацкую с указателями выкинуть
> нафиг и всего делов!


функция экспортная из DLL , убрать нельзя ...


StasStas   (2005-11-04 00:59:00) [10]


> >  conf:=CfgRequestGroup(@kol);
>
> Собачку надо убрать.


не @ пропускает ...


StasStas   (2005-11-04 00:57:00) [11]

Пишет несоответствие TConGroup и PAConGroup


Плохиш   (2005-11-04 00:56:00) [12]


> function  CfgRequestGroup( total:pinteger):PAConGroup;  
>         stdcall;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> conf  : TConGroup;
> kol:pinteger;
> begin
>
>  ZeroMemory(@conf,SizeOf(conf));
>  
>  {необходимо прочитать массив данных из функции CfgRequestGroup
> , отдельно каждый элемент что бы дернуть можно было}
>  {делал так
>  conf:=CfgRequestGroup( @kol);

Собачку надо убрать.


злобная танька   (2005-11-04 00:55:00) [13]


> Zeqfreed ©   (04.11.05 00:51) [5]

чего тут думать.. эту функцию дурацкую с указателями выкинуть нафиг и всего делов!


Zeqfreed   (2005-11-04 00:52:00) [14]

Zeqfreed ©   (04.11.05 0:51) [5]
Это было обращение к автору.


Zeqfreed   (2005-11-04 00:51:00) [15]

злобная танька   (04.11.05 0:34) [3]
[3] Работает, но, по-моему, лучше использовать какой-то более гуманный подход к решению задачи :)


злобная танька   (2005-11-04 00:36:00) [16]

шо он конкретно пишет?


злобная танька   (2005-11-04 00:34:00) [17]

а так?
conf:=CfgRequestGroup(@kol)^[0];


StasStas   (2005-11-04 00:31:00) [18]

Попробую так.
Компилятор пишет разные типы данных.


злобная танька   (2005-11-04 00:13:00) [19]

conf:=CfgRequestGroup(@kol) ^;
крышечку забыл


Наверх

Титульная страница Поиск, карта сайта Написать письмо