powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JNI Delphi Bug ?
7 сообщений из 7, страница 1 из 1
JNI Delphi Bug ?
    #34717182
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здрасте всем.

Я столкнулся со странностями, так сказать, межъязыкового взаимодействия.
А именно Java (1.6.02) и Delphi 6.

Конечная цель -- подключение сишной dll к java. На delphi уже написан класс взаимодействия (обёртка) нужной dll. Я думал, что его можно немного доработать и спокойно использовать. Но не тут то было.
По неизвестной причине функции dll нормально работающие в программе на delphi, перенесённые (почти без изменений) в обёртку для java вызывают ошибки jvm типа:

# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x10004090, pid=3336, tid=2296
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_02-b06 mixed mode, sharing)
# Problematic frame:
# C 0x10004090
#
# An error report file with more information is saved as hs_err_pid3336.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp

Причём со стопроцентной воспроизводимостью.
Однако есть методы работабщие и не работающие.
...
Рейтинг: 0 / 0
JNI Delphi Bug ?
    #34717257
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Проверь параметры вызовов для delphi. Поищи аналог __cdecl __fastcall __thiscall и т.д.
2. проблемам может быть с frame для Exception
...
Рейтинг: 0 / 0
JNI Delphi Bug ?
    #34717605
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В описании функций, вроде, всё Ок, т.к. есть полностью рабочая функция и всё описано по стандарту (Java_<пакет_класс_метод>(PEnv: PJNIEnv;Obj: JObject).

Меня беспокоит

# Problematic frame:
# C 0x10004090

Получается, что ошибку генерит С (ранее я сталкивался с такими ошибками при грязной работе с памятью). И на месте С была kernel32.dll или что-нибуть в этом роде. Или это не в ту степь?

Может сишная dll плохо работает с памятью и делфя на это забивает, а java -- нет?

А что означает "2. проблемам может быть с frame для Exception"? Приложение совсем не гуёвое.
...
Рейтинг: 0 / 0
JNI Delphi Bug ?
    #34723151
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема разрешилась странным образом.

Я стал использовать динамическую загрузку библиотек вместо статической:

function GetFRDllFunction(nm : string):TFarProc;
var
HInst : THandle;
FPointer : TFarProc;
begin
HInst := LoadLibrary(dllPath);
FPointer := GetProcAddress(HInst, PChar(nm));
Result := FPointer;
end;

а не

function <имя>():integer; stdcall; external dllPath;

Причина сего малопонятна, но следом появилась ещё проблема:
функция полностью отрабатывает, но не возвращает результат (как будто вылетает). Однако работу программа завершает корректно.

Может кто чего знает?
...
Рейтинг: 0 / 0
JNI Delphi Bug ?
    #34724326
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rublicА что означает "2. проблемам может быть с frame для Exception"? Приложение совсем не гуёвое.
# Problematic frame:
# C 0x10004090
frame это не из гуя это способ организации в С++ или Delphi обработчика Exception. Т.е. если Delphi генерирует Exception то С++ его не поймает, такое возможно даже если dll и exe собраны разными версиями компиляторов (в пример gcc 3 и 4).
...
Рейтинг: 0 / 0
JNI Delphi Bug ?
    #34724335
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rublicПроблема разрешилась странным образом.

Я стал использовать динамическую загрузку библиотек вместо статической:

function GetFRDllFunction(nm : string):TFarProc;
var
HInst : THandle;
FPointer : TFarProc;
begin
HInst := LoadLibrary(dllPath);
FPointer := GetProcAddress(HInst, PChar(nm));
Result := FPointer;
end;

а не

function <имя>():integer; stdcall; external dllPath;

Причина сего малопонятна, но следом появилась ещё проблема:
функция полностью отрабатывает, но не возвращает результат (как будто вылетает). Однако работу программа завершает корректно.

Может кто чего знает? Как описана TFarProc? Ты уверен что stdcall м?
...
Рейтинг: 0 / 0
JNI Delphi Bug ?
    #34724985
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, вроде заработало.

TFarProc - обычный Pointer, ну а указывает он конечно же на переменную типа функция с stdcall.

А проблемка с невозвратом параметра решилась просто:
добрый человек, писавший сишную dll не указал парочку параметров в документации к функции. А я методом художественно-научного тыка часа за три всётаки смог это определить...

Слава бозу не придётся писаить сокетный сервер на делфи для использования dll.

JNI СПРАВИЛСЯ!!!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JNI Delphi Bug ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]