2014-09-20 3 views
0
 var wRoot = new ctypes.unsigned_long(); 
     var wParent = new ctypes.unsigned_long(); 
     var wChild = new ctypes.unsigned_long.ptr(); 
     var nChildren = new ctypes.unsigned_int(); 

     var rez = XQueryTree(_disp, w, wRoot.address(), wParent.address(), wChild.address(), nChildren.address()) 
     if(rez != 0) { //can probably test this against `None` instead of `0` 
      var nChildrenCasted = ctypes.cast(nChildren, ctypes.unsigned_int).value; 
      for(var i=0; i<nChildrenCasted; i++) { 
       searchForPidStartingAtWindow(wChild[i]); 
      } 
     } else { 
      console.warn('this window has no children, rez:', rez); 
     } 

Я успешно получить nChildrenCasted это 94.X11 JS-ctypes, XQueryTree Acces wChild [я]

Однако я не могу получить доступ к wChild элементов, он должен быть массив

Так проблема в том, на линии: searchForPidStartingAtWindow(wChild[i]);

как пройти wChild[i]?

Я пробовал:

var wChildCasted = ctypes.cast(wChild, ctypes.unsigned_long).contents; 
console.log('wChildCasted:', wChildCasted); 

Я довольно уверен, что его вдоль этих линий, но я не могу понять это

полный код, можно копировать вставить и запустить из блокнота:

https://gist.github.com/Noitidart/224f8999eb26ec52894f

ответ

3

Вам необходимо сбрасывать из исходного типа указателя в указатель ArrayType:

var wChildCasted = ctypes.cast(wChild, ctypes.ArrayType(ctypes.unsigned_long, nChildrenCasted).ptr).contents; 
+0

спасибо !!! Эй, я догоняю вас в SO-точках :) – Noitidart