【问题标题】:Golang CGO unable to use converted stringGolang CGO 无法使用转换后的字符串
【发布时间】:2016-04-28 16:19:31
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

  • 尝试将C.SetConsoleTitle(ctitle)改为C.SetConsoleTitle(title.c_str())
  • @LPs 这似乎不可能title.c_str undefined (type string has no field or method c_str) 无论如何谢谢:)

标签: c windows go c-strings cgo


【解决方案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))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2014-02-27
    • 2016-01-12
    • 2014-10-09
    相关资源
    最近更新 更多