2016-01-22 61 views
2

我试图设置使用CGO Windows命令提示符的标题和Windows的C头:Golang CGO无法使用转换后的字符串

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

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

+0

尝试改变'C.SetConsoleTitle(ctitle)''来C.SetConsoleTitle(title.c_str( ))' – LPs

+0

@LPs这似乎不可能'title.c_str未定义(类型字符串没有字段或方法c_str)'感谢无论如何:) – buddy148

回答

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)) 
}