The easiest way to do this is to expose the C# DLL as a COM object, and then create an instance of it from your C/C++ application. See MSDN for a step-by-step guide.
Alternatively, if it's actually a C++ application that you want to be able to call the C# DLL from, you could create a mixed-mode C++/CLI application, which contains both managed and unmanaged code. The C++ application can then call functions directly from the managed C# DLL.
Also see "An Overview of Managed/Unmanaged Code Interoperability" on MSDN.
EDIT: Without any more information than "it doesn't work in C," I don't even know which of the above suggestions that you tried. As I suggested, I'm not certain if the second will work with straight C (never tried it), but I see no reason why the first wouldn't.
Regardless, the quick and dirty fix might be to wrap the C# functions in a C++ DLL, which you then call from your C application. Make sure that you declare any of the functions that you want to export from the C++ DLL as extern, otherwise their names will be mangled C++ names, which are impossible to work with in C. See here for more information: http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html