crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Передача массива из Qt программы в Free Pascal библиотеку, Вылетает SIGFPE
rominf
  опции профиля:
сообщение 21.8.2012, 23:10
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 20.8.2011
Пользователь №: 2820

Спасибо сказали: 1 раз(а)




Репутация:   0  


Здравствуйте!

К программе на Qt 4 подключается .so библиотека, написанная на Free Pascal (Lazarus). В библиотеке есть функция, принимающая по указателю массив (Size = 10):
type
  TDoubleArray = array  [0..Size - 1] of Double;
  PDoubleArray = ^TDoubleArray;    

procedure Sort(A: PDoubleArray); stdcall;


В программе:
std::vector<double> v(Size, 0);
// Заполнение вектора
typedef double (*Sort)(double [Size]);
Sort sort = (Sort)lib->resolve("Sort");
if (sort)
{
    sort(&v[0]);
    QString s = QString::number(-1.1); // Аналогично если на этом месте стоит что-нибудь с динамическим созданием объекта ("new") (*)
    ...
}

На (*) вылетает с ошибкой SIGFPE.
Если заменить на передачу по ссылке (procedure Sort(var A: TDoubleArray); stdcall;) то всё идентично.
Когда делал аналогично для сумы, но с передачей по значению (function Sum(A: TDoubleArray): Double; stdcall;), то ошибки не возникало.
Замечу, что судя по тому, что показывает дебагер, обе функции работают (при возврате управления в программу вижу отсортированный массив).
Чувствую, что проблема в выделении памяти, но, к сожалению, раньше не имел опыта по созданию динамических библиотек, поэтому не понимаю, что у меня неправильно. И мне не очень нравится использование вектора, чтобы передать его как массив, но писать в стиле С не удобно.
Подскажите, пожалуйста, в чём проблема. Буду благодарен за ссылки на литературу для глубокого изучения вопроса выделения памяти, стека вызовов, динамических библиотек.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 7:41