Interoperating
between COM and C# works through
either early or late binding. Early binding allows you to program
with types known at compile time, while late binding forces you to
program with types via dynamic discovery, using reflection on the C#
side and IDispatch on the COM side.
When calling COM programs from C#, early binding works by providing
metadata in the form of an assembly for the COM object and its
interfaces. TlbImp.exe takes a COM type library
and generates the equivalent metadata in an assembly. With the
generated assembly, it's possible to instantiate and
call methods on a COM object just as you would on any other C#
object.
When calling C# programs from COM, early binding works via a type
library. Both TlbExp.exe and
RegAsm.exe allow you to generate a COM type
library from your assembly. You can then use this type library with
tools that support early binding via type libraries such as Visual
Basic 6.