使用 64 位 Os 的 jni4net 从 java 调用 C# 时出错
Error while calling C# from java using jni4net from 64 bit Os
我正在尝试使用 jni4net 从 java 调用 C# 函数,它在 windows 32 位 os 中工作正常,但是当我尝试从 64 位 os 加载相同的 C# dll OS 我正在解决这个错误
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();
}
}
我哪里做错了
您需要使用 32 位标志编译 C# 程序。或者您可以使用 corflags {my.exe} /32BIT+ /Force
。这将使您的进程以 32 位进程启动。
我正在尝试使用 jni4net 从 java 调用 C# 函数,它在 windows 32 位 os 中工作正常,但是当我尝试从 64 位 os 加载相同的 C# dll OS 我正在解决这个错误
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();
}
}
我哪里做错了
您需要使用 32 位标志编译 C# 程序。或者您可以使用 corflags {my.exe} /32BIT+ /Force
。这将使您的进程以 32 位进程启动。