我正在使用JNA来访问DLL库(C++)方法。JNA如何将结构从Java传递给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.
,日期时间是一个结构(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)
我有相同的结果
“我的代码不会返回它应该的数据。” < - 那么它返回什么? – fge
感谢您的回复,修正了 – Darkwing
那里应该有多少回复?我怀疑排序问题... – fge