public static int GetNode(kowhai_node_t[] descriptor, kowhai_symbol_t[] symbols, out int offset, out kowhai_node_t node) { GCHandle hDesc = GCHandle.Alloc(descriptor, GCHandleType.Pinned); GCHandle hSyms = GCHandle.Alloc(symbols, GCHandleType.Pinned); IntPtr targetNode = IntPtr.Zero; int result = kowhai_get_node(hDesc.AddrOfPinnedObject(), symbols.Length, hSyms.AddrOfPinnedObject(), out offset, ref targetNode); hSyms.Free(); hDesc.Free(); node = (kowhai_node_t)Marshal.PtrToStructure(targetNode, typeof(kowhai_node_t)); return result; }
public static int Write(Tree tree, kowhai_symbol_t[] symbolPath, int offset, byte[] data) { GCHandle hDesc = GCHandle.Alloc(tree.Descriptor, GCHandleType.Pinned); GCHandle hTreeData = GCHandle.Alloc(tree.Data, GCHandleType.Pinned); kowhai_tree_t nativeTree = new kowhai_tree_t(); nativeTree.desc = hDesc.AddrOfPinnedObject(); nativeTree.data = hTreeData.AddrOfPinnedObject(); GCHandle hSyms = GCHandle.Alloc(symbolPath, GCHandleType.Pinned); GCHandle hWriteData = GCHandle.Alloc(data, GCHandleType.Pinned); int result = kowhai_write(ref nativeTree, symbolPath.Length, hSyms.AddrOfPinnedObject(), offset, hWriteData.AddrOfPinnedObject(), data.Length); hWriteData.Free(); hSyms.Free(); hTreeData.Free(); hDesc.Free(); return result; }