我正在尝试创建一个Java应用程序,它将通过一个中间的Visula C ++ dll调用C#dll,当我尝试从cmd提示符或Eclipse IDE运行.class文件时,这一切都很好,但问题是为了我需要将C#dll放在与Java.exe相同的目录中,否则会发生本机调用异常,从而无法构建Java项目,任何关于如何实现这一点的想法
答案 0 :(得分:3)
还有其他方法,没有COM。如果您无法更改.NET组件以支持COM客户端,您可能会发现一个更好或需要一个。
当加载CLR的进程时,程序集搜索路径由进程的主Win32模块的位置决定。程序集搜索路径与Win32 DLL搜索路径不同。在这种情况下,它以java.exe
的位置开头。因此,搜索路径包括全局程序集缓存(GAC),java.exe
文件夹和在java.exe.config
中列为程序集探测路径的子文件夹(如果存在)。
请参阅How the Runtime Locates Assemblies。
这导致了一些选择:
gacutil
。)java.exe
文件夹中。或者,相反,将Java副本放在应用程序文件夹中。java.exe.config
并将子文件夹列为探测路径。 java.exe
。它与JNI一起记录在案。您可以随意命名,因为毕竟它是您的应用程序。 (这就是许多基于Java的应用程序所做的事情,即使他们不使用.NET。例如,eclipse和LibreOffice。)documentation在C中提供了一个完整的示例。对于典型的MSVC构建,{ {1}}需要在项目的包含路径上,jni.h
需要在项目的库路径上,jvm.lib
需要在Win32 DLL搜索路径中。 其他替代方案:
答案 1 :(得分:1)
您可以使用COM Interop启用和注册托管(.NET)dll。 请看这个链接:http://support.microsoft.com/kb/828736