On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 9
Зарегистрирован: 27.07.10
ссылка на сообщение  Отправлено: 03.02.12 14:34. Заголовок: Передача массива в Си и обратно


Возникла задача передачи массива значений в C-функцию и его возврат в Harbour. В массиве целые и вещественные числа, символьные строки и логические значения.
Экспертом С не являюсь, могу сделать что-то не слишком сложное и больше по образцу, но у меня получилось следующее.

Скрытый текст


Код собирается без замечаний под MinGW и BCC55, но работает только собранный MinGW. Собранный BCC55 вызывает системную ошибку, но если закомментировать все вызовы free(), также работает.
Может кто-нибудь ответить на следующее:
  • как сделать поддержку и MinGW, и BCC55
  • в исходниках Harbour больше используются hb_xgrab() вместо malloc(), и hb_xfree() вместо free(). Может и здесь их применять, хотя по использованию и форме они вроде аналогичны.
  • при возврате дробного числа теряются разряды (в Harbour получаем 6.59 вместо 6.593). Но если сделать установку Set decimals to 3, то всё нормально. Существует какой-нибудь способ избежать округления? Мне приходит в голову только возвращать в символьном виде с последующим переводом Val(), но может как-нибудь по другому?

  • Спасибо: 0 
    ПрофильЦитата Ответить
    Новых ответов нет


    Ответ:
    1 2 3 4 5 6 7 8 9
    большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

    показывать это сообщение только модераторам
    не делать ссылки активными
    Имя, пароль:      зарегистрироваться    
    Тему читают:
    - участник сейчас на форуме
    - участник вне форума
    Все даты в формате GMT  3 час. Хитов сегодня: 45
    Права: смайлы да, картинки да, шрифты да, голосования нет
    аватары да, автозамена ссылок вкл, премодерация откл, правка нет