我编写了 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 { …Run Code Online (Sandbox Code Playgroud) 我需要在golang中将字符串作为参数传递给C DLL,我希望得到这样的结果:
proc, e = syscall.GetProcAddress(h, "JLINKARM_ExecCommand") //One of the functions
vals := []string{"device = STM32F429ZI"}
start := uintptr(unsafe.Pointer(&vals[0]))
asd, _, _ = syscall.Syscall6(uintptr(proc), 3, start, 0, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.Syscall采取param uintptr.我不能使用C包,因为它不会在Windows上构建.
在C中它的工作原理如下:
strcpy(acIn, "device = STM32F407IE");
JLINKARM_ExecCommand(acIn, &acOut[0], sizeof(acOut));
Run Code Online (Sandbox Code Playgroud)
那么C DLL是否可以获得字符串参数并正确使用它?