2017-07-07 106 views
4

我想使push subscription升级到Windows事件日志Golang
究竟应该如何传递回调函数?Golang中的Windows回调函数

EVT_SUBSCRIBE_CALLBACK是函数指针,就像

typedef DWORD (WINAPI *EVT_SUBSCRIBE_CALLBACK)(
    EVT_SUBSCRIBE_NOTIFY_ACTION Action, 
    PVOID      UserContext, 
    EVT_HANDLE     Event 
); 

所以,我的变异看起来是这样的:

func logCallback() syscall.Handle { 

    cb := func(_ uintptr, _ uintptr, _ uintptr) uint64 { 
     fmt.Printf("callback called %v", data) 
     return 0 
    } 
    ptr := syscall.NewCallback(cb) 
    return syscall.Handle(ptr) // type syscall.Handle uintptr 
} 

我获得成功认购的处理程序没有错误,但它仍然无法正常工作。 任何想法为什么?我应该在哪里看?

+0

寻找任何答案。 – ubombi

+1

如果你没有得到任何的错误..那你怎么测量它不起作用?什么是预期的功能和发生了什么?如何测试和调试?这是所有的代码...如果不是,你可以提供可以由社区本地运行的代码。你正在导入c? '导入“C”'作为第一行https://github.com/golang/go/issues/10973 – reticentroot

+0

是的,就是这样!你可以写它作为答案。 (Bounty) – ubombi

回答

3

当使用系统调用确保包括import "C"在你的文件的顶部。很高兴帮助你。

+0

'import _“runtime/cgo”'也可以工作 – zhangyoufu