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

Вниз

Не знаю как сделать.Функция доканает !   Найти похожие ветки 

 
StasStas   (2005-11-03 23:59) [0]

Уважаемы профессионалы 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;

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


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

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


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

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


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

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


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

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


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

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


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

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


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


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

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


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


> 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);

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


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

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


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


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


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


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


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


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


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


> 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:04) [13]

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


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


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

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


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


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

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


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


> Плохиш ©   (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 kol do
  with conf^[i] do (*  чёта делаем с полученными данными *)
end;

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


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

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

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


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


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

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


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

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

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

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

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



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

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

Наверх




Память: 0.51 MB
Время: 0.038 c
14-1130846083
Sergey_Masloff
2005-11-01 14:54
2005.11.20
В очередной раз про ECO


1-1130326946
BFG9k
2005-10-26 15:42
2005.11.20
Не работает FindClass


2-1130968376
Duralei
2005-11-03 00:52
2005.11.20
прозрачное текстовое поле


2-1131051303
Toxa_ua
2005-11-03 23:55
2005.11.20
~ ?


14-1130184262
Volodya
2005-10-25 00:04
2005.11.20
Переполнение йомкости для отработаного чернила