Проблема с загрузкой данных в структуру (TYPE)

Предыдущая тема Следующая тема Перейти вниз

Проблема с загрузкой данных в структуру (TYPE)

Сообщение  Albom в Ср Окт 13, 2010 9:14 am

Добрый день! Помогите разобраться с проблемой. Есть много функций на языке Си, собранных в библиотеку (dll). Подключаю её в FB (динамически, через DylibLoad (статически почему-то не получилось, может нужен файл .a?)). Простые функции вызываются без проблем, а вот с функцией
Код:
int seans_load(char *filename, seans_data *seans);
проблемы.
Структура seans_data в Си описана как
Код:
typedef struct
{
int day __attribute__((packed));
int month __attribute__((packed));
int year __attribute__((packed));
int hour __attribute__((packed));
int minute __attribute__((packed));
int second __attribute__((packed));

int nseans __attribute__((packed));
int nr0 __attribute__((packed));
int nr1 __attribute__((packed));

int dat1[680][19] __attribute__((packed));
int dat2[680][19] __attribute__((packed));
int dat3[680][19] __attribute__((packed));
int dat4[680][19] __attribute__((packed));
int datm1[680] __attribute__((packed));
int datm2[680] __attribute__((packed));

int datu1[680] __attribute__((packed));
} seans_data;

В FB описываю её как
Код:
Type  seans_data
   Dim Day1 As INT32
   Dim Month1 As INT32
   Dim Year1 As INT32
   Dim Hour1 As INT32
   Dim Minute1 As INT32
   Dim Second1 As INT32
   
   Dim NSeans As INT32
   Dim Nr0 As INT32
   Dim Nr1 As INT32
   
   Dim Dat1(680, 19) As INT32
   Dim Dat2(680, 19) As INT32
   Dim Dat3(680, 19) As INT32
   Dim Dat4(680, 19) As INT32
   
   Dim Datm1(680) As INT32
   Dim Datm2(680) As INT32
   
   Dim Datu1(680) As INT32
End Type

Описываю переменную
Код:
Dim dat As seans_data

Вызываю функцию как
Код:
seans_load("S270509.001", @dat  )

В итоге данные в массивы загружаются неправильно (до массивов загружается нормально).
Что не так? (аналогичная программа на C загружает данные с помощью библиотеки корректно)
Загружать данные в массивы, а потом составлять структуру - не предлагать!
Заранее спасибо!
avatar
Albom

Сообщения : 10
Дата регистрации : 2010-10-04
Возраст : 32
Откуда : Харьков

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Проблема с загрузкой данных в структуру (TYPE)

Сообщение  Саня в Ср Окт 13, 2010 1:29 pm

честно говоря, не знаю, но могу предположить что дело в обьявлении типа, точнее массивов, хотяяя...
ну, будем рассуждать логически: функция, если использовать её в проге на С, работает нормально, в отличие от проги на фрибе, следовательно, сама функция работает корректно, а дело в проге на фри... терь рассмотрим, чо именно она не так делает - она неверно загружает массивы, надо обратить внимние, что массивы двумерные, а значит, может быть так, что на си адрес ячейки вычисляется по другому, чем на фрибе, следовательно, дело в обьвлении этих самых массивов.
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: Проблема с загрузкой данных в структуру (TYPE)

Сообщение  Albom в Ср Окт 13, 2010 7:22 pm

Саня
Ты был прав. На англоязычном форуме мне подсказали, что нужно объявлять массивы не так.

Объявлению массива в Си datm1[680] (где 680 - число элементов) соответствует объявление в бейсике datm1(679) (где 679 - последний индекс массива (т.е. от 0 до 679)).

Думаю, что перепишу немного программку (изменю оформление) - буду объявлять массивы как datm1(0 to 679)
avatar
Albom

Сообщения : 10
Дата регистрации : 2010-10-04
Возраст : 32
Откуда : Харьков

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Проблема с загрузкой данных в структуру (TYPE)

Сообщение  Саня в Ср Окт 13, 2010 8:16 pm

ммм..понятно, но у меня всё-таки есть немного вопросов:
1) изначально массивы загружались неправильно, то есть массивы Dat1..4 загружались прально, а Datm1,2 и Datu -неправильно,
и если можно, расскажи поточнее, как как именно присваивались значения, точнее как должны были загружаться и что происходило..

нууу, раз бодяга в нижней границе, то по идее там все элементы должны находиться в соседнем элменте, имхо, или это не так?
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: Проблема с загрузкой данных в структуру (TYPE)

Сообщение  Albom в Ср Окт 13, 2010 9:28 pm

Саня
а вот теперь ты совсем неправильно рассуждаешь. Smile)
ВСЕ массивы загружались неправильно. в этом легко убедиться, если развернуть массив 680 на 19 в линию, а потом собрать из него массив 681 на 20 (именно такие размеры объявлялись в соответствии с кодом в первом посте). таким образом, если из первого массива хоть что-то можно было вытащить, то из последующих - всё меньше информации в совсем не тех местах. последние массивы - вообще пустые.
и про нижнюю границу я ничего не говорил (она как была 0, так и осталась). поменялась только верхняя.
это ж просто, как дважды три! Smile
avatar
Albom

Сообщения : 10
Дата регистрации : 2010-10-04
Возраст : 32
Откуда : Харьков

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Проблема с загрузкой данных в структуру (TYPE)

Сообщение  Саня в Ср Окт 13, 2010 9:41 pm

аа, блин! да ты прав, я чот думал, что нижняя граница - 1, а не 0 Sad , привычка, прост, что обьявлять и нижнюю и верхнюю сразу.

зы: 110b будет Smile
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: Проблема с загрузкой данных в структуру (TYPE)

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения