2014-09-27 6 views
0

을 설정배열을 만들고 내가 배열을 만들려고 해요 값

이 기능의
dwError = RmRegisterResources(dwSession, rgsFilenames.length, rgsFilenames, 0, null, 0, null); 

선언 :

/* http://msdn.microsoft.com/en-us/library/windows/desktop/aa373663%28v=vs.85%29.aspx 
* DWORD WINAPI RmRegisterResources(
* __in_  DWORD dwSessionHandle, 
* __in_  UINT nFiles, 
* __in_opt_ LPCWSTR rgsFilenames[ ], 
* __in_  UINT nApplications, 
* __in_opt_ RM_UNIQUE_PROCESS rgApplications[ ], 
* __in_  UINT nServices, 
* __in_opt_ LPCWSTR rgsServiceNames[ ] 
*); 
*/ 
var RmRegisterResources = lib.rstrtmgr.declare('RmRegisterResources', ctypes.winapi_abi, ctypes.unsigned_long, // DWORD 
    ctypes.uint32_t, // DWORD 
    ctypes.unsigned_int, // UINT 
    ctypes.ArrayType(ctypes.char.ptr, 1), // LPCWSTR 
    ctypes.unsigned_int, // UINT 
    ctypes.ArrayType(struct_RM_UNIQUE_PROCESS, 1), // RM_UNIQUE_PROCESS 
    ctypes.unsigned_int, // UINT 
    ctypes.ArrayType(ctypes.char.ptr, 1) // LPCWSTR 
); 

답변

0

내가 확인하는 시간이 없어,하지만 "의 RaWR"할당 @paa 사람이 뭔가

같은
rgsFilenames[0] = ctypes.char.array()("rawr"); 
0

감사해야합니다. @ John-Galt은 그것이 작동하도록하는 방법을 보여주었습니다.

let strings = ['rawr', 'blah'].map(s => ctypes.char.array()(s)); 
let a = ctypes.char.ptr.array(strings.length)(); 
strings.forEach((s, i) => { a[i] = s; }); 

을하고 함수 선언에 우리는 ctypes.char.ptr.array()

ctypes.ArrayType(ctypes.char.ptr, 1)를 변경하고 일했다 :

그는이 배열을 만들 않았다! :)

사용자 정의 유형으로 동일하게하는 것이 힘들다.

내가 arg를 변경 한 것과 같이 ctypes.ArrayType(struct_RM_UNIQUE_PROCESS, 1)에서 struct_RM_UNIQUE_PROCESS.ptr.array()으로 선언하지만 그런 요소로 채워진 배열을 만드는 방법을 모르겠다. 나는 이것을 시도했다 :

let rgApplicationsNonCData = struct_RM_UNIQUE_PROCESS.array(2)(); 
rgApplicationsNonCData[0].dwProcessId = 123; 
rgApplicationsNonCData[0].ProcessStartTime = BLAHOBJECT; 

rgApplicationsNonCData[1].dwProcessId = 123; 
rgApplicationsNonCData[1].ProcessStartTime = BLAHOBJECT; 
console.log('rgApplicationsNonCData:', rgApplicationsNonCData) 

let rgApplications = struct_RM_UNIQUE_PROCESS.ptr.array(rgApplicationsNonCData.length)(); 
console.log('rgApplications:', rgApplications) 

그것의 어떤 던지는 오류가 아니지만,이 올바른 방법입니까? 그 내용을 확인하는 방법?

) UNIQUE_PROCESSS의 어레이 RM을 생성하는 실제 코드 :

let rgApplicationsNonCData = struct_RM_UNIQUE_PROCESS.array(2)(); 
    rgApplicationsNonCData[0].dwProcessId = 123; 
    rgApplicationsNonCData[0].ProcessStartTime = new struct_FILETIME(); 
    rgApplicationsNonCData[0].ProcessStartTime.dwLowDateTime = 111; 
    rgApplicationsNonCData[0].ProcessStartTime.dwHighDateTime = 222; 

    rgApplicationsNonCData[1].dwProcessId = 123; 
    rgApplicationsNonCData[1].ProcessStartTime = new struct_FILETIME(); 
    rgApplicationsNonCData[1].ProcessStartTime.dwLowDateTime = 111; 
    rgApplicationsNonCData[1].ProcessStartTime.dwHighDateTime = 222; 

    console.log('rgApplicationsNonCData:', rgApplicationsNonCData); 

    let rgApplications = struct_RM_UNIQUE_PROCESS.ptr.array(rgApplicationsNonCData.length)(); 
    console.log('rgApplications:', rgApplications) 

console.log('rgApplications:', rgApplications)console.log('rgApplicationsNonCData:', rgApplicationsNonCData);CData {length:2}

이외의 것을 보여 해달라고을