【发布时间】:2019-02-08 01:53:03
【问题描述】:
我正在使用 Java (JNA) 访问 DLL 代码。这是我正在使用的 DLL:
U32 ReadMemU32(U32 Addr, U32 NumItems, U32* pData, U8* pStatus);
这是我的示例代码:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.*;
import com.sun.jna.*;
import java.lang.*;
import java.util.*;
import com.sun.jna.*;
import java.lang.*;
public class DLL1 {
@UserFunction(Description="DLL1 Java wrapper", Name = "DLL1")
public static String DLL1(
@UserFunction.Arg(Name = "Address", Description = "Register Address")
String Address
) throws Exception {
byte Status[] = new byte[1];
PointerByReference Data = new PointerByReference ();
long Addr = Long.parseLong(Address.substring(2, Address.length()));
DllInterface.INSTANCE.ReadMemU32(Addr, 1, Data, Status);
System.out.println("Data = " + Data);
System.out.println("Data.getValue() = " + Data.getValue());
return null;
}
// C++ function definition and tell which DLL to fetch
public interface DllInterface extends Library {
DllInterface INSTANCE = (DllInterface) Native.loadLibrary("<dll name>", DllInterface.class);
long ReadMemU32(long Addr, long NumItems, PointerByReference pData, byte[] pStatus);
}
}
我得到的结果是:
Data = allocated@0xe25ac90 (8 bytes)(com.sun.jna.ptr.PointerByReference@e25ac90)
Data.getValue() = native@0xaaaaaaaa
结果 (0xaaaaaaaa) 与我预期的不匹配。
我是 Java 新手,我不确定 PointerByReference 是否适合用于 U32* pData。请指教。
【问题讨论】: