gpt4 book ai didi

java - C# out IntPtr 在 Java 中等效

转载 作者:行者123 更新时间:2023-12-03 11:47:46 28 4
gpt4 key购买 nike

我在 C# 中有一个从 .dll 调用的方法

[DllImport("somedll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int find([MarshalAs(UnmanagedType.AnsiBStr, SizeConst = 64)] string atr, out IntPtr int);

[DllImport("somedll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int getData(IntPtr int, int dataId, byte[] dataBuffer, ref int dataBufferSize);

在 C# 中调用这个方法看起来像这样
static IntPtr number = IntPtr.Zero;
static int res = 0;
try{
number = IntPtr.Zero;
res = find(null, out number);
if (number == IntPtr.Zero)
throw new ApplicationException("Something is wrong");
uint dataBufferSize = 1024;
res = getData(number, 1, null, ref dataBufferSize);
}

我没有找到 Java 中的等价物。

如果我这样做:
public int find(String atr, Pointer int);

它说
java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokeInt(Native Method)
at com.sun.jna.Function.invoke(Function.java:419)
at com.sun.jna.Function.invoke(Function.java:354)
at com.sun.jna.Library$Handler.invoke(Library.java:244)

如果我这样做:
 public int find(String atr, IntByReference int);

没发生什么事。

Java代码
IntByReference iref = new IntByReference();                     
res = find(null, iref);
Pointer pointer = iref.getPointer();
int dataBufferSize = 1024;
byte[] dataBuffer = new byte[dataBufferSize];
res = getData(Pointer.nativeValue(pointer), 1, dataBuffer, dataBufferSize);

find 返回 0,表示 OK,而 getData 返回 6,表示内存地址不好。没有任何 react 是指除 0 以外的任何其他资源。

最佳答案

如果我将 number.getValue() 传递给 getData(),它会起作用。现在 res 为 0。

完整代码:

IntByReference number=new IntByReference(0);                        
res = find(null, number);
int dataBufferSize = 1024;
IntByReference iref=new IntByReference(dataBufferSize);
Pointer array = new Memory(dataBufferSize);
res = getData(number.getValue(),1, array,iref);
byte[] dataBuffer=array.getByteArray(0,dataBufferSize);

关于java - C# out IntPtr 在 Java 中等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43338842/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com