我有一個通過Unmanaged Exports導出功能的.NET(C#)dll,它正在被Java應用程序使用。使用JNA加載相關.NET程序集
這個C#DLL(我們稱之爲A.dll)有另一個託管依賴F3BC4DNI.dll。
因此,依賴關係鏈是這樣的:Java類< - JNA < - A.DLL < - F3BC4DNI.dll
不需要說,所有的DLL都包含在一起的應用程序bin文件夾。
然而,這個過程被稱爲javaw.exe的下運行的所有Java二進制文件,然後當我試圖通過A.DLL JNA消費,它尋找F3BC4DNI.dll 的javaw.exe的路徑,而不是同一個文件夾內A.DLL如可以在進程監視器中可以看出:
我的猜測是,A.DLL(.NET)尋找依賴性時,假設進程路徑。
我已經嘗試了很多可能的解決方案,例如設置PATH環境變量,設置JNA庫路徑以及我試圖使用Assembly.LoadFrom
明確加載A.dll中的B.dll程序集。
結果總是相同的當Java應用程序運行:
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokePointer(Native Method)
at com.sun.jna.Function.invokePointer(Function.java:470)
at com.sun.jna.Function.invokeString(Function.java:651)
at com.sun.jna.Function.invoke(Function.java:395)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
當我這些DLL文件複製到Program Files \ Java的...斌\文件夾,它的工作原理,但很明顯,我不不想在生產中以這種方式部署它。
畢竟,我假設的唯一的事情是它不是Java或JNA方面的問題,因爲它是.NET相關的依賴項,所以我必須以某種方式告訴javaw.exe .NET依賴關係在另一個夾。