Convert the C++ class and DLL to be COM. If you don't have access to the unmanaged code source or can't modify, you can implement a COM wrapper class in a different DLL that consumes the original DLL and proxies the functionality of the original class through a COM class.
Define an interface in an IDL file to represent your C++ class (along with a coclass declaration). Use only basic COM types in all methods (BSTR for strings, HRESULT for return codes). Complicated structs passed as params should be refactored into their own interface.
Build your COM DLL such that it outputs a type library (tlb file).
Implement the interface (including IUnknown methods) in your C++ class. Build the COM DLL and register it.
Import the type library into your C# project. Or use the type library importer. You should now be able to instantiate your C++ class (through COM) via "new".
By the way, ATL is a great framework to get going on this quickly.