Packaging .NET assembly as COM component works, but it has many downsides. There are more effective techniques which allows to directly export managed methods as unmanaged, so the .NET assembly could be used by the unmanaged code like any other unmanaged DLL, for example, by VB.
It is commonly believed that this is impossible. But this is not true. It is only impossible in C# or VB.NET, but quite possible using IL assembler; and this is a part of CLR ECMA and ISO standards, not like any dirty trick.
So, the idea is to use a special attribute to mark the methods to be exported as unmanaged. The code is complied by VB.NET or C#, disassembled; then the IL code is modified according to the attributes and assembled again. This is automated using the MSBuild custom step, so no knowledge of IL assembler is required.
You can find the solution in the following CodeProject articles:
Unmanaged code can wrap managed methods[
^],
How to Automate Exporting .NET Function to Unmanaged Programs[
^].
—SA