空节点结构JNA初始化(JNA initialization of empty node struc

2019-09-28 13:09发布

我有节点结构(它包含在接下来的结构相同的值)。

struct Node {
    Node *nextElem;
    Element thisValue;
};  

我想通过空(NULL)node.ByReference在占据它的功能。

// C++
Element element = ...; //fills in another function;
Node    *list   = NULL;
AddElementToList(element, &list);
// which declered as
void AddElementToList (Element element, Node * list) {...} 

// Java
Element.ByValue  element = ...; //fills great in another function in the same way ByReference (and reconstructed as ByValue), 
                                //but initialize with trash in Pointers and without recurtion;
Node.ByReference list    = null;
MyDll.INSTANCE.AddElementToList(element, list);

所以,如果我用

Node.ByReference list = null;

我得到无效的内存访问错误时,C ++方试图读取列表 ,像任何空指针秒。 所以我想初始化列表 。 但在这种情况下,我必须初始化下一个节点和明年和...

Answer 1:

我找出解决方案通过在PointerByReference包裹节点

// method declaration:
void AddElementToList(Element element, PointerByReference wrapedNodeInPointerByRef);

用法:

Element.ByValue element = ...;
PointerByReference list = new PointerByReference();  
MyDll.INSTANCE.AddElementToList(element, list); // yes, Element.ByValue puts in Element

// but to get **Node** from filled PointerByReference you should reparse it like:
Node node = new Node(list.getValue()); 

对于创建构造函数:

public Node (Pointer value) {
 super(value);
 read();
} 

对于Node.ByValue和Node.ByReference构造我有获得同样的方式。 这个例子是简化了从复杂的程序版本有更多的抽象,但希望没有什么事情是丢失,也能为别人有帮助的。

几点思考:

  1. 如果PointerByReference可以了空instanse,是否Structure.ByReference的不能?
  2. 尚不清楚为什么Element.ByValue就像元素,但申报时以Element.ByValue它couses无效的内存访问。


文章来源: JNA initialization of empty node structures
标签: java jna