First of all, please see my comment to the question.
If those C++ projects are yours and you have the source code, the best way to create a CLI wrapper would be migrating your projects from C++ to C++/CLI. This way, you can create mixed-mode
modules (managed+unmanaged) of dual purpose: they can be uses as regular unmanaged library modules, as well as regular .NET assemblies, so you could use them in your C# or VB.NET projects in a usual way, by referencing the assemblies. And the best way to organize such C++/CLI projects is to separate them into unmanaged code and managed wrappers for it. You can wrap unmanaged classes in your managed CLI "ref" classes/structures and expose the the referencing assemblies them by making public.
Please see:
https://msdn.microsoft.com/en-us/library/ms235282.aspx[
^].
See also my past answers:
How to invoke C++ DLL in ASP.NET?[
^],
Dealing with windows form application[
^].
If you still need to use explicit P/Invoke, by one or another reason, please see:
https://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx[
^].
You will see that everything is based on
DLLImportAttribute
, which is uses based on the library module name (DLL) and an entry point name, per function:
https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute%28v=vs.110%29.aspx[
^].
It means that you can wrap any number of module even in a single project, not only a single solution.
—SA