从 golang 到 c (cgo) 的 SetEvent 状态

Frn*_*Wdl 7 dll events go cgo

我编写了 DLL 来处理我在 golang 中的 VSCAN 通信。我现在面临着一个非常棘手的问题。有没有办法将状态从 cgo 发送到 c/cpp 程序?

我正在使用一个大型 CPP 项目,在它内部调用外部 golang DLL(用 GCC 编译)。程序通过事件句柄:

    // this is a function from DLL (written in go). I want to pass the event handler there.
    VSCAN_STATUS VSCAN_SetRcvEvent(VSCAN_HANDLE Handle, HANDLE Event);

    // Calling it from c:
    sg_hEventRecv = CreateEvent(nullptr, FALSE, FALSE, nullptr);
    VSCAN_SetRcvEvent(1, sg_hEventRecv)
Run Code Online (Sandbox Code Playgroud)

我将传递的 HANDLER 存储在 go dll 中:

package test

import "C"

var event C.HANDLE
func signalState(){
C.SetEvent(event) 
}

//export VSCAN_SetRcvEvent
func VSCAN_SetRcvEvent(Handle VSCAN_HANDLE, Event C.HANDLE) int {
    event = Event
    return 0
}
Run Code Online (Sandbox Code Playgroud)

每次我想从 go 发出状态信号时,它都会返回错误代码 6(无效处理程序)。