c++ - 在golang调用DLL?

标签 c++ c windows go

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)
    }
}

报告这个错误:

The data area passed to a system call is too small

最佳答案

unsafe.Sizeof(&process) 返回指针的大小——变量process占用的内存地址。

我想你想为此使用 unsafe.Sizeof(process)

关于c++ - 在golang调用DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36326870/

相关文章:

windows - 安装包后找不到 Git Bash 命令

c++ - 为什么编译器可以在 C++ 中将 char 转换为 int?

c++ - 检测进程内存是否被操纵?

c - MC9S12上的SCI无法接收数据

python - 64位python 2.5/2.6+windows 7 "import socket"DLL加载错误

java - Eclipse 执行速度比另一台电脑慢

C++初学者算法作业

c++ - 数组的掷骰子

c - 取消引用和组件选择之间的区别

c - 了解列表上通过引用调用的函数