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