Golang CGO无法使用转换后的字符串

时间:2016-01-22 06:31:36

标签: c windows go c-strings cgo

我尝试使用CGO和windows c标头设置Windows命令提示符的标题:

// #include <windows.h>
import "C"
import "unsafe"

func Title(title string) {
  ctitle := C.CString(title)
  defer C.free(unsafe.Pointer(ctitle))
  C.SetConsoleTitle(ctitle)
}

但是在编译时,会发生以下错误:

cannot use ctitle (type *C.char) as type *C.CHAR in argument to _Cfunc_SetConsoleTitle

似乎C.SetConsoleTitle(ctitle)期待一个*C.CHAR类型的字符串,但C.CString(title)正在返回*C.char

我应该如何将字符串转换为预期的类型?

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,你可以将指针转换为*C.CHAR

// #include <windows.h>
import "C"
import "unsafe"

func Title(title string) {
  ctitle := unsafe.Pointer(C.CString(title))
  defer C.free(ctitle)
  C.SetConsoleTitle((*C.CHAR)(ctitle))
}