2016-03-31 60 views
-2
package main 

import (
    "fmt" 
    "syscall" 
    "unsafe" 
) 

const (
    PROCESS_QUERY_INFORMATION = 1 << 10 
    PROCESS_VM_READ   = 1 << 4 
) 

//defind a struct 
type PROCESS_MEMORY_COUNTERS struct { 
    cb       uint32 
    PageFaultCount    uint32 
    PeakWorkingSetSize   uint64 
    WorkingSetSize    uint64 
    QuotaPeakPagedPoolUsage uint64 
    QuotaPagedPoolUsage  uint64 
    QuotaPeakNonPagedPoolUsage uint64 
    QuotaNonPagedPoolUsage  uint64 
    PagefileUsage    uint64 
    PeakPagefileUsage   uint64 
} 

func main() { 
    //get Process Handle 
    current, err := syscall.OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, false, 728) 
    if err != nil { 
     return 
    } 
    //call psapi.ll 
    psapi := syscall.NewLazyDLL("psapi.dll") 
    var process PROCESS_MEMORY_COUNTERS 
    process.cb = uint32(unsafe.Sizeof((process))) 
    GetProcessMemoryInfo := psapi.NewProc("GetProcessMemoryInfo") 
    _, _, err = GetProcessMemoryInfo.Call(uintptr(current), uintptr(unsafe.Pointer(&process)), unsafe.Sizeof(&process)) 
    if err != nil { 
     fmt.Println(err) 
    } else { 
     fmt.Println(process) 
    } 
} 

レポートこのエラー:golang呼び出しDLLについて

The data area passed to a system call is too small

答えて

0

unsafe.Sizeof(&process)ポインタ変数— processによって占有メモリのアドレスのサイズを返します。

これは、unsafe.Sizeof(process)を使用するとします。

+0

unsafe.Sizeof(process)を試してください。同じ誤りシステムコールに渡されたデータ領域が小さすぎます。 – xichen

関連する問題