我编写了 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(无效处理程序)。