You almost got it right. Just put numbers 2 and 3 in the same C++/CLI DLL. You can both use .NET classes and export C functions from a C++/CLI project.
extern "C" __declspec( dllexport ) void __stdcall PureExportC(
const wchar_t* param
)
{
CSharpAssemblyNamespace::CSharpWorker worker;
worker.DoWork( gcnew String(param) );
}