Namespace: System.Runtime.CompilerServices
Why we need Interoperation?
A company may have a large
application that is already tested, verified, and is stable. And they are
interested to use new technology while keeping the old at its position.
Secondly, not every windows API has been wrapped in with .NET
Framework.
.Net provides ample support for COM interoperation to import
and use type libraries. Runtime Callable Wrapper (RCW) is used to bridge the
communication between the COM and .NET.
Importing Type Libraries:
There are two ways to Import
libraries.
1.
Using Add Reference Feature
in Visual Studio 2005 and selecting appropriate COM component.
2.
Using tlbimp.exe. In
command prompt go to the location where your assembly is, then execute the
command “tlbimp.exe MyDll.dll [/out:ManagedMyDll.dll]
In C# optional parameters are not supported, so if you want
to pass something as null, use Type.Missing.
This is because COM Objects do not support parameter overloading, and they
require you to pass in objects as a reference.
You can use: object obj =
Type.Missing;
Tools used by COM Interop
TlbImp.exe (Type Library Import)
It imports a COM component to be consumed by the .Net
Application.
TlbExp.exe
It exports a .Net Assembly sot that it can be consumed by the
COM objects.
Regedit.exe
All COM components require to get registered in Registry, so
it’s the right tool for them.
Ildasm.exe
Intermediate Language Disassembler to view intermediate
language code.
Regasm.exe
It enables you to add/remove .NET assemblies from system
registration database.
Handling Exceptions in COM Interop:
In .Net framework 2.0, exceptions thrown from
the .NET or from outside the .Net Framework are caught by catch (exception ex)
{} as usual. But you should first look for the System.CompilerServices.RuntimeWrappedException,
which have the property WrappedException that
provides you the actual exception thrown outside the framework.
Limitations of the COM Interop:
Static/Shared Members: .Net
framework does not support static/shared methods.
Parameterized Constructors:
COM doesn’t allow parameterized constructors.
Inheritance: Shadowed members
in COM component are not recognizable / callable.
Portability: COM components
require registry that is not be available on platform other than windows.
Comments