Russian Qt Forum
Сентябрь 22, 2024, 17:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Segmentation fault при использовании внешней библиотеки  (Прочитано 2193 раз)
Владимир
Гость
« : Сентябрь 21, 2012, 13:37 »

Добрый день. Пытаюсь использовать функции из внешней библиотеки в цикле. Примерный код:
Код:
..........
char snam = (char) new char;

QLibrary swedll("swedll32.dll");

typedef char * (*Fct)(int, char *); Fct fct=(Fct)(swedll.resolve("_swe_get_planet_name@8"));

for(int i=0;i<100;++i) {

    if (fct) fct(i,snam);
..........
}

Если вызвать функцию без цикла все нормально отрабатывает. А вот если так как показано выше получаю Segmentation fault иногда на 11 проходе иногда раньше. В чем может быть проблема подскажите пожалуйста.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентябрь 21, 2012, 13:48 »

char snam = (char) new char; ты же понимаешь, что это ОДИН символ?
Что функция делает с входными данными?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Владимир
Гость
« Ответ #2 : Сентябрь 21, 2012, 14:28 »

Конечно понимаю. Функция во втором параметр возвращает первый символ строки.

Но не в этом как оказалось дело. Все дело было в том что прототип функции был указан без определения модели вызова __stdcall. После приведения кода к виду:

Код:
typedef __stdcall char * (*Fct)(int, char *); 

все заработала как надо. Улыбающийся

Доволен как удав...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 23.