2016-04-30 42 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?請協助 –

相關問題