Заплачу 100$ за ответ, позволяющий решить проблему с JAVA
От: hexen_avl  
Дата: 13.05.10 06:55
Оценка:
Заплачу 100$ за ответ, позволяющий решить проблему.

Говорю упрощенно, данный проект используется внутри портала.

Есть два компонента:
1. jar приложение на JAVA.
2. DLL работающая с DirectX.

Приложение(тестовое jar приложение) загружает DLL.
Внутри данной DLL производится формирование графических объектов DirectX.

Сейчас приложение падает при вызове в библиотеке CreateDevice с Access violation. Ниже приведен кусок кода из DLL.

Если переписать приложение jar на C++, то все работает прекрасно c данной DLL на данном сервере.

Всю эту схему пытаемся запустить на Windows Server 2008 R2 64 бита.
Используем JDK 1.6 64-bit 20-й релиз

Вся эта схема (с jar приложением) работала раньше на всех 32х битных серверах замечательно.

Вся эта схема (с jar приложением) работает замечательно под Windows 7 64 бита.

Почему сейчас не работает на Windows Server 2008 R2?

DirectX работает корректно. Видеокарта работает корректно.


bool GetDeviceX(HWND m_hWndView, RECT rect,LPDIRECT3DDEVICE9 *pDevice)
{
    LPDIRECT3DDEVICE9 m_pD3DDevice;
    D3DDISPLAYMODE d3ddm;
    CString str;
    if(FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm))) {
//        AfxMessageBox(_T("Ошибка при инициализации DirectX"),MB_ICONEXCLAMATION);
        return FALSE;
    }
    Syslog("GetAdapterDisplayMode - Ok");
    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory(&d3dpp,sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferWidth  = rect.right - rect.left;
    d3dpp.BackBufferHeight = rect.bottom - rect.top;
    d3dpp.BackBufferFormat = d3ddm.Format;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
    d3dpp.BackBufferCount        = 1;

    d3dpp.hDeviceWindow          = m_hWndView; //m_hWnd;


    if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,  D3DDEVTYPE_HAL,
                                   m_hWndView,
                                   D3DCREATE_MIXED_VERTEXPROCESSING,
                                   &d3dpp,   &m_pD3DDevice))) {
          if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,   D3DDEVTYPE_HAL,
                                         m_hWndView,
                                         D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                         &d3dpp,   &m_pD3DDevice))) {
               if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF,
                                              m_hWndView,
                                              D3DCREATE_MIXED_VERTEXPROCESSING,
                                              &d3dpp,   &m_pD3DDevice))) {
                    if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,   D3DDEVTYPE_REF,
                                                   m_hWndView,
                                                   D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                                   &d3dpp,     &m_pD3DDevice))) {
//                                            AfxMessageBox(_T("Ошибка при инициализации DirectX"),
//                                                            MB_ICONEXCLAMATION);
                                            Syslog("DX CreateDevice - Error");

                                            return FALSE;
                    }
                    else Syslog("CreateDevice(D3DDEVTYPE_REF,  D3DCREATE_SOFTWARE_VERTEXPROCESSING)");
               }
               else        Syslog("CreateDevice(D3DDEVTYPE_REF,  D3DCREATE_MIXED_VERTEXPROCESSING)");
          }
          else    Syslog("CreateDevice(D3DDEVTYPE_HAL,  D3DCREATE_SOFTWARE_VERTEXPROCESSING)");
        }
        else    Syslog("CreateDevice(D3DDEVTYPE_HAL,  D3DCREATE_MIXED_VERTEXPROCESSING)");

        *pDevice=m_pD3DDevice;
        return true;
}
Re: Заплачу 100$ за ответ, позволяющий решить проблему с JAV
От: . Великобритания  
Дата: 13.05.10 07:41
Оценка:
On 13/05/2010 09:55, hexen_avl wrote:
> d3dpp.BackBufferWidth = rect.right — rect.left;
> d3dpp.BackBufferHeight = rect.bottom — rect.top;
А здесь правильный прямоугольник?
Вообще, если у тебя есть работающий вариант с С++ — просто сравни, что все параметры имеют то же значение и в java.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: hexen_avl  
Дата: 13.05.10 07:58
Оценка:
.>А здесь правильный прямоугольник?

Причем здесь прямоугольник не знаю. Как внутри работает эта библиотека я мало задумывался. Это сторонний разработчик делает.

.>Вообще, если у тебя есть работающий вариант с С++ — просто сравни, что все параметры имеют то же значение и в java.


Здесь я тоже порою.

Не может ли быть проблема с правами на виртуальную машину какая то?
Re[3]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: Aib https://razborpoletov.com
Дата: 13.05.10 09:02
Оценка:
Здравствуйте, hexen_avl, Вы писали:

.>>А здесь правильный прямоугольник?


_>Причем здесь прямоугольник не знаю. Как внутри работает эта библиотека я мало задумывался. Это сторонний разработчик делает.


.>>Вообще, если у тебя есть работающий вариант с С++ — просто сравни, что все параметры имеют то же значение и в java.


_>Здесь я тоже порою.


_>Не может ли быть проблема с правами на виртуальную машину какая то?


А требование на u20 это обязательное? Просто в u18 появилась такая штука как "Better startup of applications and applets on systems where D3D is used" описано вот тут http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6891435

Может она глючит? Попробуйте отключить ее с помощью ключей которые там указаны.
Re[3]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: . Великобритания  
Дата: 13.05.10 10:37
Оценка:
On 13/05/2010 10:58, hexen_avl wrote:

> Причем здесь прямоугольник не знаю. Как внутри работает эта библиотека я

> мало задумывался. Это сторонний разработчик делает.
Просто предположение. Если прямоугольник не вписывается в окно, то может оно за границы буферов вылазит или что-то типа того.

> Не может ли быть проблема с правами на виртуальную машину какая то?

Как я вижу, в этом коде нет ничего связанного с java. Единственное — если java-приложение запускается под другим пользователем, с другими правами ОС.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Заплачу 100$ за ответ, позволяющий решить проблему с JAV
От: Turyst  
Дата: 13.05.10 10:50
Оценка:
Здравствуйте, hexen_avl, Вы писали:

На всякий случай используй DirectX Debug Runtime с DirectX SDK. Рисовать то оно может то что надо, но проверить на ошибки не помешает.
Re[2]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: hexen_avl  
Дата: 14.05.10 07:45
Оценка:
.>Вообще, если у тебя есть работающий вариант с С++ — просто сравни, что все параметры имеют то же значение и в java.

Все сравнили — одни и те же значения у параметров.
Re[4]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: hexen_avl  
Дата: 14.05.10 07:48
Оценка:
Aib>А требование на u20 это обязательное? Просто в u18 появилась такая штука как "Better startup of applications and applets on systems where D3D is used" описано вот тут http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6891435

Aib>Может она глючит? Попробуйте отключить ее с помощью ключей которые там указаны.


Поигрался с ключами о которых Вы говорите. Ничего не помогает.
Раньше стояла 18-я версия. Только вчера поставили 20-ю.

Вы предлагаете вообще полее раннюю поставить?
Re: Заплачу 100$ за ответ, позволяющий решить проблему с JAV
От: hexen_avl  
Дата: 14.05.10 08:01
Оценка:
Смотрим под отладчиком при вызове код.

При вызове CreateDevice происходит что-то типа такого...

First-chance exception at 0x000007feed9ae1ed in javaw.exe: 0xC0000005: Access violation at location 0x000007feed9ae1ed.
Re[3]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: . Великобритания  
Дата: 14.05.10 11:24
Оценка:
On 14/05/2010 10:45, hexen_avl wrote:

> .>Вообще, если у тебя есть работающий вариант с С++ — просто сравни, что

> все параметры имеют то же значение и в java.
>
> Все сравнили — одни и те же значения у параметров.
А dll одинаковые подгружаются? PATH может быть разный...
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: hexen_avl  
Дата: 14.05.10 14:18
Оценка:
.>А dll одинаковые подгружаются? PATH может быть разный...
это было первое, что я проверил.
одна и та же.
Re[5]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: . Великобритания  
Дата: 14.05.10 14:24
Оценка:
On 14/05/2010 17:18, hexen_avl wrote:

> .>А dll одинаковые подгружаются? PATH может быть разный...

> это было первое, что я проверил.
> одна и та же.
И все зависимости тоже проверил? Скажем, msvcrt.dll.
Знаю, что такая есть в WINDOWS/SYSTEM32/ и в jre6/bin/
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: Aib https://razborpoletov.com
Дата: 14.05.10 17:08
Оценка:
Здравствуйте, hexen_avl, Вы писали:



Aib>>А требование на u20 это обязательное? Просто в u18 появилась такая штука как "Better startup of applications and applets on systems where D3D is used" описано вот тут http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6891435


Aib>>Может она глючит? Попробуйте отключить ее с помощью ключей которые там указаны.


_>Поигрался с ключами о которых Вы говорите. Ничего не помогает.

_>Раньше стояла 18-я версия. Только вчера поставили 20-ю.

_>Вы предлагаете вообще полее раннюю поставить?


И в ней работает или нет? Я предлагаю попробовать до 17-й включительно
Re: Заплачу 100$ за ответ, позволяющий решить проблему с JAV
От: lollipop  
Дата: 17.05.10 05:52
Оценка:
Скорее всего из за политики безопасности не загружается dll. Это моё ИМХО. Вы подписывали jar ' ку? Давайте попробуем подпишем и посмотрим стек вызовов.
Re[2]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: Other Sam Россия  
Дата: 17.05.10 11:57
Оценка:
On 05/17/2010 12:52 PM, lollipop wrote:
> Скорее всего из за политики безопасности не загружается dll. Это моё
> ИМХО. Вы подписывали jar ' ку? Давайте попробуем подпишем и посмотрим
> стек вызовов.

Я не сталкивался ни с чем таким. Но Access Violation часто ловил при
неправильных файловых разрешениях на DLL-ках COM-серверах. Проверял
обычно с помощью FileMon. (Записывал лог и смотрел на все отклоненные
запросы на чтение файлов).
Posted via RSDN NNTP Server 2.1 beta
Re: Заплачу 100$ за ответ, позволяющий решить проблему с JAV
От: Аноним  
Дата: 18.05.10 01:37
Оценка:
Здравствуйте, hexen_avl, Вы писали:
Проверьте CompressedOOPs
Re: Заплачу 100$ за ответ, позволяющий решить проблему с JAV
От: hexen_avl  
Дата: 19.05.10 14:36
Оценка:
Решение так и не найдено было.
Сейчас изменяем архитектуру системы.
Отвязываем работу DirectX от явы.
Приходится переделывать часть системы.
Re[2]: Заплачу 100$ за ответ, позволяющий решить проблему с
От: Aib https://razborpoletov.com
Дата: 19.05.10 19:28
Оценка:
Здравствуйте, hexen_avl, Вы писали:

_>Решение так и не найдено было.

_>Сейчас изменяем архитектуру системы.
_>Отвязываем работу DirectX от явы.
_>Приходится переделывать часть системы.

Вот тут написано как можно продебажить инициализацию D3D и почему он иногда не запускается и как отключить проверки.

http://forums.java.net/jive/thread.jspa?messageID=283127&#283127

В результате пришли к заключению что проблема в драйверах.
Re: Заплачу 100$ за ответ, позволяющий решить проблему с JAV
От: Cyberax Марс  
Дата: 19.05.10 19:36
Оценка:
Здравствуйте, hexen_avl, Вы писали:

_>Приложение(тестовое jar приложение) загружает DLL.

_>Внутри данной DLL производится формирование графических объектов DirectX.
_>Сейчас приложение падает при вызове в библиотеке CreateDevice с Access violation. Ниже приведен кусок кода из DLL.
Правильная потоковая модель выбрана? Для DirectX нужно вызвать CoInitializeEx(NULL, COINIT_MULTITHREADED) до вызова CreateDevice.

http://msdn.microsoft.com/en-us/library/ms695279%28VS.85%29.aspx
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.