Проблема с загрузкой данных в структуру (TYPE)
Участников: 2
Страница 1 из 1
Проблема с загрузкой данных в структуру (TYPE)
Добрый день! Помогите разобраться с проблемой. Есть много функций на языке Си, собранных в библиотеку (dll). Подключаю её в FB (динамически, через DylibLoad (статически почему-то не получилось, может нужен файл .a?)). Простые функции вызываются без проблем, а вот с функцией
Структура seans_data в Си описана как
В FB описываю её как
Описываю переменную
Вызываю функцию как
В итоге данные в массивы загружаются неправильно (до массивов загружается нормально).
Что не так? (аналогичная программа на C загружает данные с помощью библиотеки корректно)
Загружать данные в массивы, а потом составлять структуру - не предлагать!
Заранее спасибо!
- Код:
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 загружает данные с помощью библиотеки корректно)
Загружать данные в массивы, а потом составлять структуру - не предлагать!
Заранее спасибо!
Albom- Сообщения : 10
Дата регистрации : 2010-10-04
Возраст : 38
Откуда : Харьков
Re: Проблема с загрузкой данных в структуру (TYPE)
честно говоря, не знаю, но могу предположить что дело в обьявлении типа, точнее массивов, хотяяя...
ну, будем рассуждать логически: функция, если использовать её в проге на С, работает нормально, в отличие от проги на фрибе, следовательно, сама функция работает корректно, а дело в проге на фри... терь рассмотрим, чо именно она не так делает - она неверно загружает массивы, надо обратить внимние, что массивы двумерные, а значит, может быть так, что на си адрес ячейки вычисляется по другому, чем на фрибе, следовательно, дело в обьвлении этих самых массивов.
ну, будем рассуждать логически: функция, если использовать её в проге на С, работает нормально, в отличие от проги на фрибе, следовательно, сама функция работает корректно, а дело в проге на фри... терь рассмотрим, чо именно она не так делает - она неверно загружает массивы, надо обратить внимние, что массивы двумерные, а значит, может быть так, что на си адрес ячейки вычисляется по другому, чем на фрибе, следовательно, дело в обьвлении этих самых массивов.
Re: Проблема с загрузкой данных в структуру (TYPE)
Саня
Ты был прав. На англоязычном форуме мне подсказали, что нужно объявлять массивы не так.
Объявлению массива в Си datm1[680] (где 680 - число элементов) соответствует объявление в бейсике datm1(679) (где 679 - последний индекс массива (т.е. от 0 до 679)).
Думаю, что перепишу немного программку (изменю оформление) - буду объявлять массивы как datm1(0 to 679)
Ты был прав. На англоязычном форуме мне подсказали, что нужно объявлять массивы не так.
Объявлению массива в Си datm1[680] (где 680 - число элементов) соответствует объявление в бейсике datm1(679) (где 679 - последний индекс массива (т.е. от 0 до 679)).
Думаю, что перепишу немного программку (изменю оформление) - буду объявлять массивы как datm1(0 to 679)
Albom- Сообщения : 10
Дата регистрации : 2010-10-04
Возраст : 38
Откуда : Харьков
Re: Проблема с загрузкой данных в структуру (TYPE)
ммм..понятно, но у меня всё-таки есть немного вопросов:
1) изначально массивы загружались неправильно, то есть массивы Dat1..4 загружались прально, а Datm1,2 и Datu -неправильно,
и если можно, расскажи поточнее, как как именно присваивались значения, точнее как должны были загружаться и что происходило..
нууу, раз бодяга в нижней границе, то по идее там все элементы должны находиться в соседнем элменте, имхо, или это не так?
1) изначально массивы загружались неправильно, то есть массивы Dat1..4 загружались прально, а Datm1,2 и Datu -неправильно,
и если можно, расскажи поточнее, как как именно присваивались значения, точнее как должны были загружаться и что происходило..
нууу, раз бодяга в нижней границе, то по идее там все элементы должны находиться в соседнем элменте, имхо, или это не так?
Re: Проблема с загрузкой данных в структуру (TYPE)
Саня
а вот теперь ты совсем неправильно рассуждаешь. )
ВСЕ массивы загружались неправильно. в этом легко убедиться, если развернуть массив 680 на 19 в линию, а потом собрать из него массив 681 на 20 (именно такие размеры объявлялись в соответствии с кодом в первом посте). таким образом, если из первого массива хоть что-то можно было вытащить, то из последующих - всё меньше информации в совсем не тех местах. последние массивы - вообще пустые.
и про нижнюю границу я ничего не говорил (она как была 0, так и осталась). поменялась только верхняя.
это ж просто, как дважды три!
а вот теперь ты совсем неправильно рассуждаешь. )
ВСЕ массивы загружались неправильно. в этом легко убедиться, если развернуть массив 680 на 19 в линию, а потом собрать из него массив 681 на 20 (именно такие размеры объявлялись в соответствии с кодом в первом посте). таким образом, если из первого массива хоть что-то можно было вытащить, то из последующих - всё меньше информации в совсем не тех местах. последние массивы - вообще пустые.
и про нижнюю границу я ничего не говорил (она как была 0, так и осталась). поменялась только верхняя.
это ж просто, как дважды три!
Albom- Сообщения : 10
Дата регистрации : 2010-10-04
Возраст : 38
Откуда : Харьков
Re: Проблема с загрузкой данных в структуру (TYPE)
аа, блин! да ты прав, я чот думал, что нижняя граница - 1, а не 0 , привычка, прост, что обьявлять и нижнюю и верхнюю сразу.
зы: 110b будет
зы: 110b будет
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|