Golang CGO не может использовать преобразованную строку

Я пытаюсь установить заголовок командной строки Windows, используя CGO и заголовок Windows c:

// #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

Как мне преобразовать строку в ожидаемый тип?


person buddy148    schedule 22.01.2016    source источник
comment
попробуйте изменить C.SetConsoleTitle(ctitle) на C.SetConsoleTitle(title.c_str())   -  person LPs    schedule 22.01.2016
comment
@LPs Это кажется невозможным title.c_str undefined (type string has no field or method c_str) В любом случае спасибо :)   -  person buddy148    schedule 22.01.2016


Ответы (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))
}
person buddy148    schedule 22.01.2016