事实证明我正在构建我的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,以便准确了解您的功能名称.