2016-04-30 230 views
1

我想从java调用C#函数使用jni4net在Windows 32位操作系统中正常工作但是当我尝试从64位操作系统加载相同的C#dll时gettig这个错误从Java中使用jni4net从64位调用C#时的错误

C:\Program Files (x86)\csharp\jni4net.n.w64.v20-0.8.6.0.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform 
at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary0(Unknown Source) 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.load0(Unknown Source) 
at java.lang.System.load(Unknown Source) 
at net.sf.jni4net.CLRLoader.init(CLRLoader.java:47) 

,这里是我的代码

public class JNIFromC 
{ 
private static String BRDIGE_INIT_URL="C:\\Program Files (x86)\\csharp\\jni4net.n.w64.v20-0.8.6.0.dll"; 
private static String JNI_URL="C:\\Program Files (x86)\\csharp\\csharp.j4n.dll"; 
    public static void main(String[] args) { 
     Csharp cSharp=new getMyFunctionsFromCSharp(); 

    } 
public static Csharp getMyFunctionsFromCSharp() throws IOException { 

     Bridge.setClrVersion("v20"); 
     Bridge.init(new File(BRDIGE_INIT_URL)); 
     File shardFile = new File(JNI_URL); 

     Bridge.LoadAndRegisterAssemblyFrom(shardFile); 
     return new Csharp(); 
    } 
} 

什么可能我是做错了

+0

错误是非常明显的,它声称你是在32位操作系统上,或者你正在使用32位版本的Java来运行该程序。如果你想加载一个64位版本的dll,确保你的操作系统是64位,你的java也是如此。 – user2494817

+0

@ user2494817当我尝试在64位操作系统上安装64位Java时,由于应用程序是一个小程序,因此浏览器无法识别java插件。 –

+0

浏览器还有64位吗? – user2494817

回答

1

您需要32位标志编译C#程序。或者你可以使用corflags {my.exe} /32BIT+ /Force。这会使你的进程开始为32位进程。

+0

所以我应该编译应用程序到平台目标x86?然后哪个dll我加载64位操作系统\t Bridge.init(新文件(“C:\\ myproject \\ jni4net.n.w32.v20-0.8.6.0.dll”));它是W32还是W64?请协助 –