|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Всем привет. Есть рабочий проект x64 dll на Rio 10.3.3. В нем только одна функция, тело которой обернуто JVM. Сторонний Java сервис x64 с этой функцией прекрасно работает. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Поставил Sydney 10.4.2. Собрал проект. Java сервис даже не стартует. Отладчик в нем пишет OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended Exception in thread "main" java.lang.UnsatisfiedLinkError: моя_длл.dll: Произошел сбой в программе инициализации библиотеки динамической компоновки (DLL) at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:384) Кто что может подсказать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 16:17 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Немного добавлю инфы Если в функции оставить только пустую обертку, то dll загружается динамически из Java Код: pascal 1. 2. 3. 4. 5. 6.
Но стоит только добавить пустой модуль данный все ломается в Сиднее. В Рио работает... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 16:46 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
А если так? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
И что это за типы JObject, JString, JInt, JLong? Интерфейсы? Вместо Код: pascal 1.
попробовать Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 17:29 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
_Vasilisk_, JObject, JString, JInt, JLong - это типы из JNI.pas type // JNI Types JBoolean = Boolean; JChar = WideChar; JShort = Smallint; JFloat = Single; JDouble = Double; JSize = JInt; Замена Application на nil не помогает. Самый прикол, что ошибка в Java происходит ДО вызова функции. Почему-то в Java не грузится сама dll. Стоит выкинуть из функции Код: pascal 1. 2. 3. 4. 5.
dll чудесным образом начинает грузиться. Причем в Rio работал весь код. Просто бред какой-то... М.б. Sydney использует какую-то системную dll, которая в Rio нахрен не нужна была... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 17:44 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
LoadLibrary попробуй вызвать для своей dll из того места, где она лежит ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 18:02 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Может чего в манифесте DLL? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 18:02 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Ну и костыль на всякий случай: сделай в 10.3.3 dll, которая уже будет вызывать DLL на 10.4. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 18:03 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
rgreat, Манифест - галка не стоит в настройках проекта. Буду тестировать LoadLibrary для своей dll ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 18:10 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Судя по SergSVK Стоит выкинуть из функции dmPDF.Create, dll чудесным образом начинает грузиться Ошибка при загрузке не "java".dll, а к "pdf".dll. Возможно, с путями к "pdf".dll связана. Какие-то версии "pdf".dll могут быть из-под Java не видны. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 20:39 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Ничего не получилось в итоге. На Rio 10.3.3 dll грузится динамически в Java процесс, а на 10.4 нет. Все происходит еще до вызова функции в этой dll. Стоит из кода функции убрать динамическое создание модуля данных (даже пустого - без не визуальных компонентов) dll начинает грузиться в Java процесс. Замена модуля данных на форму рояли не играет. Что-то я очень сомневаюсь что виновата библиотека JNI... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 11:01 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Пробовать отлаживать 1. Первым модулем в uses dpr добавляем модуль StopDebug. 2. Модуль StopDebug делаем таким Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
3. Компилируем с флагом Use debug dcu's 4. Запускаем Java процесс 5. Если появляется сообщение Pause1, то ставим брекпойнт на Pause2, делаем Attach to Process и цепляемся к Java процессу 6. После этого закрываем окно с Pause1 и начинаем нажимать F7 с обходом всех секций initialization и поиском проблемного места ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 11:34 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
Procmon'ом погляди может зависимости какие найти не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 12:04 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
_Vasilisk_, Огромное спасибо ! Обе Pause работают. Java на компе у коллеги. Пока просто отключаю модули по одному и проверяю... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 12:28 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
SergSVK Обе Pause работают. _Vasilisk_ 5. Если появляется сообщение Pause1, то ставим брекпойнт на Pause2, делаем Attach to Process и цепляемся к Java процессу 6. После этого закрываем окно с Pause1 и начинаем нажимать F7 с обходом всех секций initialization и поиском проблемного места ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 13:08 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
_Vasilisk_, Ситуация разрешилась быстрее чем я думал. Коллега быстро сваял тестовое java приложение TestApp.jar запускаемое через батник. Оно динамически грузит dll без вызова функции. Я так понимаю захостится к батнику нельзя. Но баг нашелся. 1. Дело не в компонентах доступа к данным SDAC и компонентах отчета. Они лежат в DataModule. 2. У меня в DataModule еще динамически создается свой объект. В одном из методов которого есть строчка FGrid:=TDBGrid.Create(FForm). Этот объект используется во многих интерфейсных проектах, а не только в проекте с JNI. Сам метод в проекте с JNI естественно не используется. Стоит закомментировать эту строчку - проблема исчезает и dll грузится. 3. В дельфовом модуле Vcl.DBGrids по сравнению с Rio добавлены модули Vcl.ImageCollection, Vcl.VirtualImageList. Скорее всего дело в них... Не знаю поменялось ли что-то в D11. Как еще лучше проверить у меня нет идей... Это к тому что бы разработчики делфей были в курсе... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 16:24 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
SergSVK Я так понимаю захостится к батнику нельзя. _Vasilisk_ цепляемся к Java процессу SergSVK 2. У меня в DataModule еще динамически создается свой объект. В одном из методов которого есть строчка FGrid:=TDBGrid.Create(FForm) . Этот объект используется во многих интерфейсных проектах SergSVK Стоит из кода функции убрать динамическое создание модуля данных ( даже пустого - без не визуальных компонентов ) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 16:30 |
|
JNI и Sydney 10.4.2
|
|||
---|---|---|---|
#18+
_Vasilisk_, Большое спасибо за Ваши советы. Я приложил маленький тестовый проект. Если Вам или кому еще интересно можно попробовать запустить в D10.4 и D11. 1. 47 - строка вызывающая ошибку загрузки dll в java процесс. По умолчанию закомментирована. dll грузится 2. Убираем заглушку - не грузится в D10.4. В 10.3 Rio и XE8 грузится. 3. Тестовое java приложение - TestApp.bat 4. https://jdk.java.net/17/ - jdk.java что бы работало java приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 11:05 |
|
|
start [/forum/topic.php?fid=58&msg=40128060&tid=2036691]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 439ms |
0 / 0 |