Hello, Win32 API(Go) World!

Posted on 5月 6th, 2012 by cx20

Win32 API(Go)

Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Go言語 にて syscall.Syscall 関数を用いた呼出し例である。

ソースコード

package main 
 
import ( 
    "syscall" 
    "unsafe" 
) 
 
var ( 
    user32, _          = syscall.LoadLibrary("user32.dll") 
    procMessageBoxW, _ = syscall.GetProcAddress(user32, "MessageBoxW") 
)
 
func MessageBox(hwnd uintptr, text string, caption string, style uintptr) (int32) { 
    ret, _, _ := syscall.Syscall6(
        uintptr(procMessageBoxW), 
        4, 
        hwnd,
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))), 
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))), 
        style, 
        0,
        0 ) 
    return int32(ret)
} 
 
func main() { 
    defer syscall.FreeLibrary(user32) 
    MessageBox( 0, "Hello, Win32 API(Go) World!", "Hello, World!", 0 )
}

Win32 データ型と Go言語 データ型の対応は主に以下のようになっている。

Win32 データ型 C/C++ データ型 Go データ型
HANDLE void * uintptr
BYTE unsigned char uint8, byte
SHORT short int16
WORD unsigned short uint16
INT int int32, int
UINT unsigned int uint32
LONG long int32
BOOL int int
DWORD unsigned long uint32
ULONG unsigned long uint32
CHAR char byte
WCHAR wchar_t uint16
LPSTR char * *byte
LPCSTR const char * *byte, syscall.StringByPtr()
LPWSTR wchar_t * *uint16
LPCWSTR const wchar_t * *uint16, syscall.StringToUTF16Ptr()
FLOAT float float32
DOUBLE double float64
LONGLONG __int64 int64
DWORD64 unsigned __int64 uint64

コンパイル方法

C:¥> SET GOROOT=C:go
C:¥> go build -ldflags -Hwindowsgui hello.go

実行結果

---------------------------
Hello, World!
---------------------------
Hello, Win32 API(Go) World!
---------------------------
OK   
---------------------------

Tags:

Categories: Go, library, Win32 API

2 Responses to 'Hello, Win32 API(Go) World!'

  1. stofu より:

    カテゴリの多さにびびったんですが
    「ひたすら Hello World するブログ」を見て笑いました

    • cx20 より:

      stofu さん、コメントありがとうございます。
      あまり参考にならないかも知れないですが、各プログラム言語のイメージを掴んで頂けたらと思います。
      (自分も、1つ1つの言語については、詳しくありません(^^;;)
      ちなみに記事一覧を表形式にしたもの↓があります。こちらの方がカテゴリ一覧より見やすいかもしれません。

      ■ Hello, World 一覧
      http://cx20.main.jp/blog/hello/language-table/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing