如何在Go语言中调用DLL

Python020

如何在Go语言中调用DLL,第1张

关键是 lpOnRecvCardEvent 这个函数第二个参数是个 C++ 指针。 楼主在 C# 中声明这个导出函数时,使用了并不对应的 CardEvent[] C# 数组类型。 正确的做法是: 在 C# 声明 lpOnRecvCardEvent 时,第二个参数应该是 IntPtr ,不是数组。 由于楼...

window下调用API列出所有运行的进程

[Google Go]代码

package main

import (

"fmt"

"syscall"

"unsafe"

"strconv"

)

type ulong int32

type ulong_ptr uintptr

type PROCESSENTRY32 struct {

dwSize ulong

cntUsage ulong

th32ProcessID ulong

th32DefaultHeapID ulong_ptr

th32ModuleID ulong

cntThreads ulong

th32ParentProcessID ulong

pcPriClassBase ulong

dwFlags ulong

szExeFile [260]byte

}

func main() {

kernel32 := syscall.NewLazyDLL("kernel32.dll")

CreateToolhelp32Snapshot := kernel32.NewProc("CreateToolhelp32Snapshot")

pHandle,_,_ := CreateToolhelp32Snapshot.Call(uintptr(0x2),uintptr(0x0))

if int(pHandle)==-1 {

return

}

Process32Next := kernel32.NewProc("Process32Next")

for {

var proc PROCESSENTRY32

proc.dwSize = ulong(unsafe.Sizeof(proc))

if rt,_,_ := Process32Next.Call(uintptr(pHandle),uintptr(unsafe.Pointer(&proc)))int(rt)==1 {

fmt.Println("ProcessName : "+string(proc.szExeFile[0:]))

fmt.Println("ProcessID : "+strconv.Itoa(int(proc.th32ProcessID)))

}else{

break

}

}

CloseHandle := kernel32.NewProc("CloseHandle")

_,_,_ = CloseHandle.Call(pHandle)

}