2013/08/05

Recent entries from same category

  1. gRPC のサービスが簡単に作れるライブラリ「lile」
  2. CreateFile で FILE_SHARE_DELETE を指定するとどうなるか
  3. Visual Studio Code で ssh 先のファイルを編集する方法
  4. 虫が入り込むその瞬間
  5. ダウンロードの進捗プログレスバー実装は可能か

Twitterで「Go言語で、いわゆるプラグインの動的ロードってできる?」という発言を見かけたので。 CGOが書けるのでなんでも出来ます。Linux であれば goffi を使えばほぼ何でも出来ます。
cookieo9/goffi - GitHub

Go FFI (and dlopen) packages to wrap C libraries. This code is not being actively d...

https://github.com/cookieo9/goffi
Windows であれば CGO を使わずとも、もともと Windows API には LoadLibrary、GetProcAddress という物が用意されており、Go言語にもその wrapper が提供されています。
package main

import (
    "log"
    "syscall"
    "unsafe"
)

func main() {
    dll, err := syscall.LoadDLL("user32.dll")
    if err != nil {
        log.Fatal(err)
    }
    defer dll.Release()

    proc, err := dll.FindProc("MessageBoxW")
    if err != nil {
        log.Fatal(err)
    }

    proc.Call(0,
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("メッセージ"))),
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("ボックス"))),
        0)
}
golang
便利ですね。

blog comments powered by Disqus