其实本来就是闲的蛋疼,有个开发板,以前用VC,VB些过测试程序,,一时心血来潮,想弄个JAVA来控制下开发板玩玩
没想到遇到了个问题卡壳了,,,
做过技术的人应该都能理解我的心情吧 呵呵
前前后后,已经送了1000分了对于这个问题, 但是还是没有解决掉,,前面的帖子都结了也
这次送1000分,问题解决后,另开贴9个帖子送分。
外加3合1的ARM开发板一块,配件齐全,但邮费需要自付。
我的问题如下,先列下我参考的代码,如下:
假设我们现在有这样一个C语言结构体
struct UserStruct{
long id;
wchar_t* name;
int age;
};
使用上述结构体的函数
#define MYLIBAPI extern "C" __declspec( dllexport )
MYLIBAPI void sayUser(UserStruct* pUserStruct);
对应的Java程序中,在例1的 接口中添加下列代码:
public static class UserStruct extends Structure{
public NativeLong id;
public WString name;
public int age;
public static class ByReference extends UserStruct implements Structure.ByReference { }
public static class ByValue extends UserStruct implements Structure.ByValue
{ }
}
public void sayUser(UserStruct.ByReference struct);
Java中的调用代码:
UserStruct userStruct=new UserStruct ();
userStruct.id=new NativeLong(100);
userStruct.age=30;
userStruct.name=new WString("奥巴马"); TestDll1.INSTANCE.sayUser(userStruct);
我觉得这段代码和我的应该比较类似的, 我做了如下的声明,请高手帮看看哪里有问题谢谢
首先模仿结构的声明:
public static class UserStruct extends Structure{
public static class ByReference extends UserStruct implements Structure.ByReference { }
public static class ByValue extends UserStruct implements Structure.ByValue { }
public int Address;
public int Length;
public byte num[][]=new byte[8][30];
}
接口函数里做如下模仿
public static interface RFSAPIV2 extends Library {
RFSAPIV2 INSTANCE = (RFSAPIV2)
Native.loadLibrary("RFSAPIV2",
RFSAPIV2.class);
int ReadLabelID(long hh,int nMax, UserStruct.ByReference idBuffer,int[] nCounter);
}
在按钮过程中做如下
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
UserStruct idBuffer = new UserStruct();
idBuffer.Address=0;
idBuffer.Length=0;
idBuffer.num[0][0]=(byte)0x00; // 这地方没有把数组全面初始化不知道影响否???
int nCounter[]={0};
int nMax=10;
apiReturn=RFSAPIV2.INSTANCE.ReadID(hScanner[0], nMax, idBuffer, nCounter);
}
做语法检查时,,提示上面的函数调用部分的红色字体,即第三个参数 错误。
“
无法将 接口 desktopapplication2.DesktopApplication2View.RFSAPIV2 中的 方法 ReadID 应用于 long,int,desktopapplication2.DesktopApplication2View.UserStruct.ByReference,int[](long,int,desktopapplication2.DesktopApplication2View.UserStruct,int[])
--
(按 Alt-Enter 组合键可显示提示)
”
请指导一下 ,谢谢。
指导解决问题后,送1000分,外加3合1 ARM开发板一块(邮资自付)
本人结贴即使,可参加近几天的结贴情况,已经前后送出了1000分了,就这个问题。。。
------最佳解决方案--------------------------------------------------------