2023-01-20 284
我正在尝试访问已写入C#的Java中的DLL方法.从以下代码中,我尝试构建成功生成的DLL.
using System;
using Microsoft.Win32;
namespace CyberoamWinHelper
{
public class RegistryAccess
{
public static String getValue(String key)
{
RegistryKey rk = Registry.CurrentUser;
RegistryKey rk1=rk.OpenSubKey("Software\\Test", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
rk1.SetValue(key, "val1");
return rk1.GetValue(key).ToString();
}
public static void createSubkey(String name)
{
RegistryKey rk = Registry.CurrentUser;
rk.CreateSubKey("Software\\Test");
}
}
}
之后,我将生成的DLL加载在我的Java程序代码中,如下所示
public class JNI {
/**
* @param args the command line arguments
*/
public native String getValue(String key);
public static void main(String[] args) {
// TODO code application logic here
try
{
System.loadLibrary("CyberoamWinHelper");
JNI j=new JNI();
System.out.println(j.getValue("abc"));
}
catch(UnsatisfiedLinkError e)
{
System.out.println("Ex" + e.getMessage());
}
}
}
运行此代码后,它给了我以下错误.
"Exjni.JNI.getValue(Ljava/lang/String;)Ljava/lang/String;"
好吧,我不明白这个错误在说什么,但我想解决它.
我要遇到的另一个问题是因为我称之为的方法是一种静态方法,它会以这种方式调用吗?我的意思是调用静态方法,我们需要
” className.methodname”
所以这里可以调用该方法?
您只能通过JNI调用方法,如果这些方法实际上被设计为这种方式.您的方法绝对不是.您在这里所做的事情(很抱歉如此直率)绝对没有成功的机会 – 它根本无法使用这种方式.
您可能有几种方法.一种是了解JNI以及如何编写实际使用的库. 在这里.使用C#进行此操作会增加另一层复杂性.
另一种方法是完全放弃JNI,并使用更合适的机制访问方法.您可以了解 jna 在这里;这将完全适合您的目标.
尝试 jni4net .从他们的网站.这里有一些详细的解释 – >
您对JNI的使用不正确.很难(尽管不是不可能)将JNI与C#库一起使用.有一个很好的教程,关于如何进行在这里 .在Google上进行C#JNI搜索将显示更多.
您还应该调查 grasshopper ..
/a>
是一个很酷的解决方案.
以上所述是小编给大家介绍的在java中访问dll方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25969.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态