After struggling with some C# wrappers for the PROJ geospatial library I decided to try C interop. It worked! I was able to avoid creating structs on the C# side by way of the proj_coord helper function on the C side. This and other thoughtful things in proj.h made it a pleasure to use. Check it out:
https://gist.github.com/jamesdavidson/3b94b36597d4fc1febd957814648669b
My original version worked on Linux and macOS but failed with AccessViolationException errors on Windows. It turns out I did need to set up a struct on the C# side to marshal the return value of proj_coord. So I've updated the gist with that. Considerably more messy and complicated but the journey was interesting and now it works on all three major x86_64 platforms.