![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Курсант |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Здравствуйте!
Суть проблемы - есть dll, в ней три функции, все три возвращают тип данных float, параметров не принимают. Одна из функций (вторая) возвращает единицу. Подключаюсь динамически к dll, получаю указатели на все три функции. Поочередно вызываю их и вывожу получаемые от них значения на график. В итоге вторая функция возвращает единицу, а первая и третья - нуль (Хотя нуль они не могут возвращать). На случай если правильно удалось подключиться только к второй функции, поменял в исходнике dll логику второй функции, чтобы она выдавала всякие дробные значения - в итоге и вторая функция стала выдавать нуль. Вопрос - что за глюк? Может это разные формы представления типа float в dll и в моей программе? dll скомпилирована на gcc, а программа в C++ Builder 6.0. З.ы. На предыдущей программе все работало, но я потерял исходники и теперь переписываю заново, и вот, такой глюк :( Исходник прилагаю...
Это сообщение отредактировал(а) Курсант - 5.6.2011, 18:11 |
|||
|
||||
Курсант |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Я использовал при загрузке библиотеки LoadLibrary... А в библиотеке используются глобальные переменные... Может ли быть, что LoadLibrary - неподходящая функция для запуска dll и ее работы с собственными глобальными переменными?
Это сообщение отредактировал(а) Курсант - 5.6.2011, 18:53 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
Прописан ли явно тип вызова функций (__cdecl, __stdcall)?
Если нет, то нужно прописать. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Курсант |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Спасибо за ответ. Прописан __stdcall. Пробовал по-всякому.. и __fastcall, и __stdcall, и __cdecl, и WINAPI, и везде одно и то же получается.
Сейчас удивился в очередной раз. Вывожу глобальную переменную времени из библиотеки таким же образом - время отсчитывается нормально (т.е. глобальная переменная времени в библиотеке накапливается). При этом время инкрементируется на стотысячные доли секунды... Все больше склоняюсь к тому, что форма представления чисел с плавающей точкой разная, но ведь это наверняка процессорный стандарт, и никак он различаться не может... Судя по наблюдениям, в ноль обращаются переменные, при вычислении которых в библиотеке используется операция умножения... Может и правда мантиссы как-то переподгоняются при умножении.. Это сообщение отредактировал(а) Курсант - 5.6.2011, 19:25 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
Покажи исходники функций из библиотеки. И ещё: а как ты объединил чисто линуксовый gcc и чисто виндузёвый builder? Или ты имел в виду minGW?
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
В отладчике (каком-нибудь OllyDbg) посмотреть, что происходит, можете? Пробовали собрать библиотеку и программу одним компилятором? Проблема только с float, или также с double?
|
|||
|
||||
Курсант |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
эммм... пока проблема только с float... использовать один компилятор для библиотеки и для программы я не могу - к программе подключаются разные библиотеки. У всех у них одинаковые по названию функции внутри, но разный алгоритм преобразования. И компилировать их просто необходимо в gcc. А программа писана в Builder'e и если бы был способ эту программу компилировать с помощью gcc, я бы откомпилировал...
Может попробовать другой Builder? У меня есть старая программа, тоже на Builder'e, но кажется с другого дистрибутива... Там, на этой программе, все работает... А на новой - не работает... Библиотеку прилагаю... model.c
model.h
Добавлено через 1 минуту и 33 секунды всмысле, с double я пока не проверял. Попробую сделать отладку в Olly, о результатах отпишусь позже... |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
Всё-таки явного типа вызова у тебя нет…
Так как у тебя получилось объединить чисто линуксовый и чисто виндузёвый компилятор? А ClearVariables точно вызывается? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Курсант |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Не знаю насчет подружить - я использую компилятор gcc для windows...
Проверяю насчет вызова ClearVariables... Добавлено через 2 минуты и 47 секунд Блин ![]() ![]() ![]() ![]() Я забыл вызвать ClearVariables... Все заработало ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |