Hmm ... ease of Delphi and power of C++ ... very tempting
I finally found what I was doing wrong above: trying to link to a mixed .exe. I changed the C++ project to a DLL and it worked fine. So it seems C# can link easily to a mixed or pure .dll, but only to a pure .exe. Writing a managed wrapper for the unmanaged functions only saves you from [importing functions explicitly].