![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не знаю как сделать.Функция доканает ! [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) ^;
крышечку забыл