【发布时间】:2015-04-07 04:53:30
【问题描述】:
我正在使用 JNA 访问 DLL 库 (C++) 方法。
我要访问的方法具有以下签名:int DownloadData(DateTime dateTime);
Return Values
COM_ERROR if an error occurs.
0 if no new records to download.
# of records transferred, if successful.
,DateTime是一个结构体(C++代码):
struct DateTime
{
int minute;
int hour;
int day;
int month;
int year;
};
我正在按照以下方式进行:
import com.sun.jna.FunctionMapper;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import com.sun.jna.Structure;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
class JavaApplication1
{
public static class DateTime extends Structure {
public int minute;
public int hour;
public int day;
public int month;
public int year;
}
...
public interface CLibrary extends Library
{
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("LibPro", CLibrary.class, options);
int DownloadData(DateTime dateTime);
}
...
public static void main(String[] args)
{
DateTime dateTime = new DateTime();
dateTime.day=1;
dateTime.hour=0;
dateTime.minute=0;
dateTime.month=1;
dateTime.year=2012;
System.out.println("Record count : "+CLibrary.INSTANCE.DownloadData(dateTime));
}
}
但是我的代码没有返回传输了多少记录,而是返回-32704。库通常会返回这样的值然后出现问题。
我在 JNA 方面做得对吗?我还能尝试什么?
感谢您的帮助!
UPD。如果我发送空值CLibrary.INSTANCE.DownloadData(null) 我有相同的结果
【问题讨论】:
-
"我的代码没有返回它应该返回的数据。"
-
应该有多少回复?我怀疑是字节顺序问题...
-
@Andrej fge 在这里。在调试器中检查 int 作为字节,我猜你会看到问题 -32704 是可疑的。
-
@Andrej “-32704 不可疑 - [...] 返回这样的值然后有些地方不正确”
-
如果您的库使用 stdcall 调用约定,请确保扩展
StdCallLibrary而不是Library。重命名库接口也是一个好主意,因为您没有映射到 C 运行时库。