Подтвердить что ты не робот

Проверьте, загружена ли библиотека dll? (Ява)

В программе Java, которую я пишу, я делаю jni-вызов DLL и загружаю библиотеку при запуске следующим образом

static
{
   System.loadLibrary("LdapAuthenticator2");
}

Затем я реализовал другой класс, который загружает одну и ту же библиотеку, и я получаю сообщение об ошибке, заявив, что библиотека уже загружена, есть ли способ проверить, запущена ли библиотека?

Спасибо,
-Pete

4b9b3361

Ответ 1

Проверьте мой ответ на этот вопрос

Как получить список загружаемых библиотек JNI?

Решение работает, к сожалению, у плаката вопроса, похоже, есть проблемы с совместимым с SUN JVM или слишком ограниченным SecurityManager.

Ссылка на исходный код исходного кода POC.

List loaded JNI libraries java sourcecode

Ответ 2

Какая ошибка? Если это исключение, вы можете просто его поймать?

Другой подход - сделать ровно один класс, ответственный за загрузку библиотеки. Вы можете загрузить библиотечную часть статического инициализатора класса, а затем загрузить класс == для загрузки библиотеки.

EDIT: javadocs для Runtime.loadLibrary() (какие вызовы System.loadLibrary) даже предлагает подход статического инициализатора:

Если встроенные методы должны использоваться в реализации класса, стандартная стратегия заключается в том, чтобы код в файле библиотеки (назовите его LibFile), а затем поставить статический инициализатор:

     static { System.loadLibrary("LibFile"); }

в объявлении класса. Когда класс загружается и инициализируется, необходимый собственный код реализация для собственных методов затем будет загружен.

В javadocs также говорится:

Если этот метод вызывается более одного раза с тем же именем библиотеки, второй и последующие вызовы игнорируются.

что делает меня еще более любопытным по поводу ошибки, которую вы получаете.