To use a string as an output parameter you should use the StringBuilder class instead of String.
[DllImport("avicap32.dll"),CharSet=CharSet.Unicode]
extern "C" bool capGetDriverDescription(UInt16, StringBuilder^, int, StringBuilder^, int);
But in C++/CLI you can directly call the native C function without use P/Invoke: you can mix managed and unmanaged code. Hope it helps! :)