P/Invoke is not that bad - you basically just copy the c header declaration and adjust a bit. It starts to be interesting strings or large memory where you want to avoid copying it too much. Doing it cross-platform is a bit of pain (basically copy everything and point it to different library - .dll vs .so) it would be nice if there was a better way. I still haven't figured out how to get unicode strings to work cross platform though.