首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IncompatibleClassChangeError jni4net

IncompatibleClassChangeError jni4net
EN

Stack Overflow用户
提问于 2016-09-29 18:34:01
回答 1查看 264关注 0票数 2

我目前正在尝试使用.NET调用jni4net代码。

我已经设法使用proxygen从.NET .dll创建代理类。然而,这一守则:

代码语言:javascript
复制
Bridge.init();
Bridge.LoadAndRegisterAssemblyFrom(new File("clAESEncripcion.j4n.dll"));
aesencryption.AESObjectEnc aesObjectEnc = new aesencryption.AESObjectEnc();
aesObjectEnc.Encrypt(new Ref<String>("To encrypt"));

引发以下异常:

代码语言:javascript
复制
Exception in thread "main" java.lang.IncompatibleClassChangeError
    at aesencryption.AESObjectEnc.Encrypt(Native Method)
    at clAESEncripcion.MainApp.main(MainApp.java:19)
    at net.sf.jni4net.jni.JNIEnv.ExceptionTest()(:0)
    at net.sf.jni4net.jni.JNIEnv.CallIntMethod()(:0)
    at net.sf.jni4net.inj.__IClrProxy.getClrHandle()(:0)
    at net.sf.jni4net.inj.__IClrProxy.GetObject()(:0)
    at net.sf.jni4net.utils.Convertor.StrongJp2CString()(:0)
    at net.sf.jni4net.utils.Convertor.FullJ2C()(:0)
    at net.sf.jni4net.Ref.GetValue()(:0)
    at AESEncryption.__AESObjectEnc.Encrypt1()(:0)

我目前正在使用jdk1.7.0_75 64位、Microsoft.NET\Framework64\v4.0.30319和jni4net0.8.6.0。

dll的AESObjectEnc C#类有一个加密方法,它需要一个字符串引用。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-19 11:42:36

不能使用jni库将字符串传递给.dll文件中的.dll Ref方法。如果ref参数是整数或简单的c#对象,则可以使用jni库将int值或对象传递给C# .dll文件。

您可以从这里中找到更多细节。

如果要将字符串传递给c# .dll文件,请在.dll文件中创建一个只接受字符串而不接受Ref字符串的新函数。然后使用jni库从java类调用该函数。现在可以将字符串值传递给c#代码。并从新创建的函数中调用Ref String函数。请查看此示例代码。

JAVA代码

代码语言:javascript
复制
Bridge.init();
Bridge.LoadAndRegisterAssemblyFrom(new File("clAESEncripcion.j4n.dll"));
aesencryption.AESObjectEnc aesObjectEnc = new aesencryption.AESObjectEnc();

public void javaMethod(){
    String val = "To encrypt";
    String receive_val = "";
    receive_val = aesObjectEnc.CallEncrypt(val);
    System.out.println(receive_val);
}

C#代码

新方法

代码语言:javascript
复制
public String CallEncrypt(String val){

    String send_val = val;
//Call Encrypt Method   
    Encrypt(ref send_val);

//Get Value
    String output = send_val;  
//Pass value to Java Class  
    return output;
}

现有加密方法

代码语言:javascript
复制
public String Encrypt(ref String receive_val){
    receive_val = receive_val + " ok";
}

这将提供输出

代码语言:javascript
复制
//To encrypt ok
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39777596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档