win7 java jna找不到_java – JNA找不到函数

博主在本文中分享了在使用JNA(Java Native Access)调用DLL(动态链接库)时遇到的问题,详细描述了DLL函数导出名称与JNA映射不匹配的困境。通过分析,博主发现函数名在编译过程中被修饰为包含参数大小的格式,如`myfunc@8`或`myfunc@32`。为解决此问题,博主建议使用特定工具来准确获取函数的实际导出名称。最终,通过调整JNA映射,成功解决了调用问题。
摘要由CSDN通过智能技术生成

事实证明我正在构建我的DLL就好了,JNA也发现我的DLL也很好;我在确定编译器如何破坏我的符号时出错了.我命名为myfunc的函数被导出为myfunc @ 8或myfunc @ 32,具体取决于它们作为参数占用的字节数.这是我在JNA项目中使用的代码:

import java.util.*;

import com.sun.jna.*;

import com.sun.jna.win32.*;

//

public class Test

{

public interface mydll extends StdCallLibrary

{

mydll INSTANCE = Native.loadLibrary("mydll", mydll.class, new HashMap {{

put("myfunc", "myfunc@8");

//Other functions

}});

public int myfunc (long arg);

//Other functions

}

//

public static void main (String[] args)

{

System.out.println

(mydll.INSTANCE.myfunc((long)0x23A3920F)); //Or whatever

return 0;

}

}

我的代码:

#include

#include

__declspec(dllexport) int __stdcall myfunc (__int64);

/* Other functions */

__declspec(dllexport) int __stdcall myfunc (__int64 arg)

{

/* Whatever */

return return_value;

}

GCC很高兴只使用-shared切换并链接到正确的库,就像我原来的问题一样.我强烈建议您下载this tool,以便准确了解您的功能名称.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值