2016-01-22 29 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)) 
}