DLLs are portable units of code that can be used by applications written in many languages. When a DLL changes, the changed version is used by the client applications without those applications being recompiled or redeployed.
Managed C++ applications can use an unmanaged DLL through It Just Works interop or by using PInvoke .
Using PInvoke provides excellent control over marshaling; you can write code to convert managed types to unmanaged types automatically.
C# and VB.NET applications can access the DLL only through PInvoke .