Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизНе знаю как сделать.Функция доканает ! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.043 c