typedef struct A{
double Value;
char Type;
char Name[100];
char SymbolTableName[100];
int updateMode;
int dataType;
char ulSize;
} A;
typedef struct B{
int numAs;
struct A* as;
} B;
B fill(void){
B sVal;
sVal.numAs=100;
int i=0;
sVal.as = (A*)malloc(sizeof(A) * sVal.numAs);
memset(sVal.as, 0, sizeof(A) * sVal.numAs);
//X in scope , everything is ok here.
X= ReadShared(); // It return struct array , X is struct same type.
for(i=0; i<sVal.numAs; i++)
{
sVal.as[i].Value=X->datas[i].Value;
sVal.as[i].Type=X->datas[i].Type;
strcpy(sVal.as[i].Name,X->datas[i].Name);
strcpy(sVal.as[i].SymbolTableName,X->datas[i].SymbolTableName);
sVal.as[i].updateMode=X->datas[i].updateMode;
sVal.as[i].dataType=X->datas[i].dataType;
sVal.as[i].ulSize=X->datas[i].ulSize;
}
return sVal;
}
public class TestClass {
public interface Test extends Library {
public static class A extends Structure {
public static class ByReference extends A implements Structure.ByReference{}
double Value;
char Type;
char Name;
char SymbolTableName;
int updateMode;
int dataType;
char ulSize;
protected List getFieldOrder() {
// TODO Auto-generated method stub
return null;
}
}
public static class B extends Structure {
public static class ByValue extends B implements Structure.ByValue {}
public int numAs;
public A.ByReference as;
protected List getFieldOrder() {
// TODO Auto-generated method stub
return null;
}
}
public B.ByValue fill();
}
/**
* @param args
*/
public TestClass(){
}
static void funcc(){
NativeLibrary.addSearchPath("tester", "/root/Desktop/");//Path is true
Test test=(Test)Native.loadLibrary("tester", Test.class);
Test.B.ByValue jig=test.fill();
Test.A[] Avals = (Test.A[])jig.as.toArray(jig.numAs);
}
}
您还没有在structure
类中定义结构字段的顺序。JNA需要这些信息才能正确地从本机内存读写。
您还错误地映射了本机char
和char[]
。
对于类A
,需要以下内容:
double Value;
byte Type;
byte[] Name = new byte[100];
byte[] SymbolTableName = new byte[100];
int updateMode;
int dataType;
byte ulSize;
protected List getFieldOrder() {
return Arrays.asList("Value", "Type", "Name", "SymbolTableName", "updateMode", "dataType", "ulSize");
}
protected List getFieldOrder() {
return Arrays.asList("numAs", "as");
}
问题内容: 我正在尝试从CSV文件中的一组数字中找到最大值和最小值。我的代码在某些行中始终为Max函数返回错误的数字。这是我的代码: 我的输出示例: 我不确定我做错了什么。一些建议,将不胜感激。 问题答案: 您的列表元素是字符串。您需要对其进行转换,以避免按字典顺序进行比较(按字母顺序,一次只比较一个字符,这是因为) 除非您实际上想要字符串,否则不要创建新列表,而只需传递给您的函数即可:
jna 中 structure 结构体怎么读取, 在回调函数中 我收到对方返回一个 pointer 是海康的sdk NET_DVR_SetDVRMessageCallBack_v50 的回调函数 有个 pAlarmInfo:Pointer 类型, 想接收为 NET_DVR_ACS_ALARM_INFO 类型, 要怎么做 我试过这样读取, 但没有讲到到
这是我的合约代码。在这里,我试图存储特定行程的坐标。虽然存储信息合约执行良好。但是当我检索数据时,它应该给出坐标数组。但它抛出了一个错误。 原因:'uint256类型的数据不足' 我在这里错过了什么。有没有其他方法来实现我在这里尝试的? 附言:我是固体新手。
我的程序返回错误et,我不知道为什么。我如何解决这个问题? 错误: 错误:无法将“std::ostream{aka std::basic\u ostream}”左值绑定到“std::basic\u ostream”
我想用C++做一个简单的函数来练习一下。它应该做与python中的range()函数相同的事情,但现在要简单得多。我遇到了一个问题,数组没有正确地从函数返回到主函数。我曾经在下面编码,得到了一个奇怪的错误。有人知道问题出在哪里吗?
问题内容: 我试图弄清楚需要更改什么SWIG接口文件才能处理getFoo返回一个指向自定义结构数组(sender_id_t)的指针。没有任何特殊的SWIG接口代码,我只得到Java端的指针。如何将指针转换为可以循环或迭代的内容(在Java中),以便获取每个sender_id_t id值?感谢任何建议。 C结构: C函数: 例外: 问题答案: 最简单的解决方案不涉及编写任何JNI,实际上是方法2。因