LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

Organization

cgoでコマンドライン引数を渡すには

背景

gimpのプラグインをGoで書けそうだったので、作業を
始めたら、C APIでargc,argvつまり、コマンドライン引数を渡す
必要があった。

コマンドライン引数をC APIに渡すには

コマンドラインの引数の取得にはosパッケージで行える。問題は、これをcgoで
C APIに渡すにはどうすればよいのか。

argcはC.int型。
argvが分からず調べ始めたのだが、C.char*型の配列を用意すると良い模様。
unsafeパッケージを使えば、配列の先頭アドレスとしてC API側に渡せるらしい。

import (
    "os"
    "unsafe"
)

argc := C.int(len(os.Args))
argv := make([]*C.char, argc)
for i, arg := range os.Args {
    argv[i] = C.CString(arg)
}
C.initGimp(argc, (**C.char)(unsafe.Pointer(&argv[0])))

関連記事

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2