cgo - 如何将go字符串转换为LPCWSTR(cgo - How to convert go string to LPCWSTR)
我想使用一些windows api,但我不知道如何开始。 有没有它的教程?
无论如何,我有一个简单的代码。 你能帮我解决这个问题吗?
package mypackage /* #cgo LDFLAGS: -luser32 #include <windows.h> */ import "C" import "unsafe" func MessageBox(m string) { cm := C.CString(s) defer C.free(unsafe.Pointer(cm)) C.MessageBoxA(C.HWND(nil), (*C.CHAR)(cm), C.LPCSTR(nil), 0) // It display a message. }编辑:我可以处理char *但仍然不知道wchar_t *是什么。
import "syscall" func MessageBoxU(m string) { C.MessageBoxW(C.HWND(nil), (*C.WCHAR)(unsafe.Pointer(syscall.StringToUTF16Ptr(m))), C.LPCWSTR(nil), 0) }如果这不是成语,请告诉我。
I would like to use some of windows api, but I have no idea how to start. Is there any tutorial for it?
Anyway I have a simple code. Can you please help me to get this correct?
package mypackage /* #cgo LDFLAGS: -luser32 #include <windows.h> */ import "C" import "unsafe" func MessageBox(m string) { cm := C.CString(s) defer C.free(unsafe.Pointer(cm)) C.MessageBoxA(C.HWND(nil), (*C.CHAR)(cm), C.LPCSTR(nil), 0) // It display a message. }Edit: I can deal with char* but still do not know what with wchar_t*.
import "syscall" func MessageBoxU(m string) { C.MessageBoxW(C.HWND(nil), (*C.WCHAR)(unsafe.Pointer(syscall.StringToUTF16Ptr(m))), C.LPCWSTR(nil), 0) }Please let me know if this is not go idiom.
最满意答案
以下是将Windows API打包为Go的两个项目:
github.com/antonlahti/go-winapi github.com/AllenDang/w32一个用法示例:
func setWidgetText(hwnd HWND, text string) error { if TRUE != go-winapi.SendMessage(hwnd, WM_SETTEXT, 0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text)))) { return newError("WM_SETTEXT failed") } return nil }The following are two projects which wrap the Windows API to Go:
github.com/antonlahti/go-winapi github.com/AllenDang/w32A usage example:
func setWidgetText(hwnd HWND, text string) error { if TRUE != go-winapi.SendMessage(hwnd, WM_SETTEXT, 0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text)))) { return newError("WM_SETTEXT failed") } return nil }更多推荐
发布评论