Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Вот сегодня потратил 3 часа пытаясь выяснить, где же я накосячил.
Вот исходники показывающие эту багу.
http://cp.people.overclockers.ru/cgi-bi ... hi_bug.rar
И так. У Delphi есть функции , выдающие текущую дату и время
Date(), Now(), Time(), все они используют GetLocalTime(). И всегда работали без проблем! Теперь что у меня вышло. У меня есть .dll в которой есть процедура (в архиве все исходники) которая загружает d3d8.dll, потом берет адрес Direct3DCreate8, создает интерфейс IDirect3D8, потому создает IDirect3DDevice8 и производит некоторые вычисления (их я выкинул из тестового проекта, так как они не влияют на ошибку) и высвобождает интерфейсы.
И далее в программе на Delphi. Подгружается .dll, вызывается экспортируемая функция, затем выгружается .dll.
Так вот, после этих действий, функции Date и Now сходят с ума и выдают безобразные значения!
В исходниках на delphi я вывожу данные из этих функций в Memo используя их как float. Так вот, Date() всегда обязан выдавать результат как ЦЕЛОЕ число. А после вызова CheckValues из .dll, функция Date выдает еще и дробную часть, а такого быть не может.

Что не так в работе .dll?
Ошибка проявляется после вызова вот этой строки
Код:
      HRESULT res=lpd->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,
         wnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
         &pm,&d3d8d);

Тут создается экземпляр IDirect3DDevice8 , причем в реальной программе эта процедура пашет как надо, все что надо создается и работает.
Но почему у основной программы , написанной на Delphi, сносит крышу ?

Жду мыслей. Я лично отчаялся найти причину, может не туда смотрю ? :)



Партнер
 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Гениально :D У меня тоже этот баг проявляеться.
Ну как варианты:
- попробовать подключать dll не динамически
- посмотреть последние ошибки системы(может работа с сервисом глючит)
- переписать DirectX SDK под Delphi :-)

_________________
Ку ку


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
- попробовать подключать dll не динамически - Не помогает
- посмотреть последние ошибки системы(может работа с сервисом глючит) - Что именно и где???
- переписать DirectX SDK под Delphi - У меня есть SDK под Дельфи, но мне он там совсем не нужен, в данной задаче вызовы должны быть в .dll написанной на Си
_______
Народ я скоро повешусь :) Не может же быть такого бага :(


 

Member
Статус: Не в сети
Регистрация: 14.04.2003
Откуда: Минск, Беларусь
Да ты посмотри что пд-сы с сопроцессором вытворяют - они PC (Precision Control) сбивают с 2 (округление до Extended) до 0 (Округление до Single). И маски нахуа меняют? Чувствуешь всю прелесть ситуации? А лечилово простое:
var
SaveCW:Word;
.....
SaveCW:=Default8087CW;
CheckValues(handle);
Set8087CW(SaveCW);

Но я... простите руки за такое отрывать надо.

Добавлено спустя 1 минуту, 40 секунд:
О! Оказывается автоцензурирование на форуме работает! Что есть правильно!

_________________
"Помогите, 20 беспроводных мышей общаются сквозь стены!"
--- SweetLow ---


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Ого! А кто меняет то? Чей код такое делает? D3D8 чтоли?


 

Member
Статус: Не в сети
Регистрация: 14.04.2003
Откуда: Минск, Беларусь
Ray Adams
Цитата:
Ого! А кто меняет то? Чей код такое делает? D3D8 чтоли?

Нет, Пушкин А.С. MS просто неоднократно замечена в этом была, так что я угадал мелодию с одной ноты :)

_________________
"Помогите, 20 беспроводных мышей общаются сквозь стены!"
--- SweetLow ---


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Мдяяя, сенкс за помошь. Фигу бы я догадался в какую сторону смотреть! :) Дебагером лазил, но вот на состояние сопроцессора как то и не смотрел! :)


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Ray Adams
Цитата:
- посмотреть последние ошибки системы(может работа с сервисом глючит) - Что именно и где???
Я имел ввиду GetLastError, но проблема уже решена как вижу :-)

_________________
Ку ку


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan