First of all, I'm assuming you mean Native C++ .dlls as opposed to COM objects. Given that, you need a wrapper to map the C++ data types to C# types, and that wrapper is PInvoke. It isn't a thick wrapper; it's pretty much the equivalent of what you'd do if you were calling C++ .DLLs from VB.