C++ 在golang呼叫DLL上? 主程序包 进口( “fmt” “系统调用” “不安全” ) 常数( PROCESS\u QUERY\u INFORMATION=1

C++ 在golang呼叫DLL上? 主程序包 进口( “fmt” “系统调用” “不安全” ) 常数( PROCESS\u QUERY\u INFORMATION=1,c++,c,windows,go,C++,C,Windows,Go,不安全。Sizeof(&PROCESS)返回指针的大小-变量PROCESS占用的内存地址 我想您应该使用unsafe.Sizeof(进程)。尝试unsafe.Sizeof(进程),同样的错误是传递给系统调用的数据区域太小。 package main import ( "fmt" "syscall" "unsafe" ) const ( PROCESS_QUERY_INFORMATION = 1 << 10 PROCESS_VM_READ

不安全。Sizeof(&PROCESS)
返回指针的大小-变量
PROCESS
占用的内存地址

我想您应该使用
unsafe.Sizeof(进程)

尝试unsafe.Sizeof(进程),同样的错误是传递给系统调用的数据区域太小。
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)
    }
}