У меня странная проблема. У меня есть проект на C ++, который в основном является оберткой для сторонней DLL, например:
MyLibrary
--loads DLL_A
---- загружает DLL_B
Я загружаю DLL_A с помощью LoadLibrary (), оборачиваю несколько ее функций и генерирую свою собственную DLL. Я проверил это в проекте C ++ и C #. Оба делают все, что должны: загружают DLL_A, выполняют пару вызовов функций и косвенно загружают DLL_B. Проблема в том, когда я собираю DLL для Java и делаю звонки через JNI. Все работает так, как должно (без java.lang.UnsatisfiedLinkError), но когда приходит время для DLL_A загрузить DLL_B, это не работает.
После отладки загрузка DLL_B происходит при вызове функции в DLL_A, которая принимает обратный вызов. При вызове из Java этот вызов функции кажется неудачным (с указателем функции все в порядке, и фактический вызов происходит без помех), и я получаю странное всплывающее окно, в котором говорится, что DLL_B не удалось загрузить, и моя программа остается в ожидании обратный вызов, который никогда не происходит. Я могу явно загрузить DLL_B просто отлично (как из Java, так и из C ++), и я проверил все возможные пути, переменные пути и попытался поместить dll повсюду, чтобы посмотреть, может ли это выглядеть где-то забавно. Я почти уверен, что это не проблема пути.
В конечном итоге я не знаю, как DLL_A загружает DLL_B, и я не могу понять, почему все отлично работает в C ++ и C #, но не в Java. Я совершенно сбит с толку. Это все еще может быть чем-то конкретным для моей установки (хотя я выглядел так же усердно, как могу), но я выкидываю этот сценарий, чтобы посмотреть, не сталкивался ли кто-нибудь с подобной проблемой.
-Dave