Go et c
Auteurs : Yi Wang, Gustavo Niemeyer, Andrew Gerrand, adg, Xavier Méhaut
V1.0
Sommaire
Préambule .............................................................................................................................................. 3 Appel d’une DLL Windows à partir de Go (adg) ..................................................................................... 3 Bases de l’encapsulation du C en Go (Gustavo Niemeyer) ..................................................................... 4 La commande cgo (golang.org) ............................................................................................................. 6 C? Go? Cgo! (Andrew Gerrand) .............................................................................................................. 7 Callbacks avec cgo (Ostsol) .................................................................................................................. 10 Linker statiquement du code C++ avec du code en Go (YI Wang) ...................................................... 14 Plus de ressources concernant SWIG et GO ? .................................................................................. 16
Préambule
Go permet d’appeler du code C voire C++ , soit en chargeant une bibliothèque partagée (.so, .dll), soit en intégrant le code Go directement avec du C (cgo, swig).
Appel d’une DLL Windows à partir de Go (adg)
Un simple exemple d’appel de DLL windows en Go: package main import ( "syscall" "unsafe" "fmt" ) func abort(funcname string, err int) { panic(funcname + " failed: " + syscall.Errstr(err)) } var ( kernel32, _ = syscall.LoadLibrary("kernel32.dll") getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW") user32, _ messageBox, _ "MessageBoxW") ) const ( MB_OK MB_OKCANCEL MB_ABORTRETRYIGNORE MB_YESNOCANCEL MB_YESNO MB_RETRYCANCEL MB_CANCELTRYCONTINUE MB_ICONHAND MB_ICONQUESTION MB_ICONEXCLAMATION MB_ICONASTERISK MB_USERICON MB_ICONWARNING