Describe the advantages of writing a managed code
application instead of unmanaged one. Whatís involved in
certain piece of code being managed?
The advantages include automatic garbage collection,
memory management, support for versioning and security.
These advantages are provided through .NET FCL and CLR,
while with the unmanaged code similar capabilities had
to be implemented through third-party libraries or as a
part of the application itself.
Are COM objects managed or unmanaged?
Since COM objects were written before .NET, apparently
they are unmanaged.
Any code not written in the Microsoft .NET framework
environment is UNMANAGED. So naturally COM+ is unmanaged
because it is written in Visual Basic 6.
So can a COM object talk to a .NET object?
Yes, through Runtime Callable Wrapper (RCW) or PInvoke.
How do you generate an RCW from a COM object?
Use the Type Library Import utility shipped with SDK.
tlbimp COMobject.dll /out:.NETobject.dll or reference the COM library from
Visual Studio in your project.
I canít import the COM object that I have on my
machine. Did you write that object?
You can only import your own objects. If you need to use
a COM component from another developer, you should
obtain a Primary Interop Assembly (PIA) from whoever
authored the original object.
The answer to (5) is only partially correct. You *can*
import COM objects, even if they are not your own. It is
recommended that you obtain the Primary Interop from the
vendor, but not required. The most common problem
importing a COM DLL is that it exposes objects that form
part of a separate COM DLL. You can generate interops
for these additional DLLs, and then refer to them when
importing the problem DLL.
How do you call unmanaged methods from your .NET code
Supply a DllImport attribute. Declare the methods in
your .NET code as static extern. Do not implement the
methods as they are implemented in your unmanaged code,
youíre just providing declarations for method
Can you retrieve complex data types like structs from
the PInvoke calls?
Yes, just make sure you re-declare that struct, so that
managed code knows what to do with it.
I want to expose my .NET objects to COM objects. Is that
Yes, but few things should be considered first. Classes
should implement interfaces explicitly. Managed types
must be public. Methods, properties, fields, and events
that are exposed to COM must be public. Types must have
a public default constructor with no arguments to be
activated from COM. Types cannot be abstract.
Can you inherit a COM class in a .NET application?
The .NET Framework extends the COM model for reusability
by adding implementation inheritance. Managed types can
derive directly or indirectly from a COM coclass; more
specifically, they can derive from the runtime callable
wrapper generated by the runtime. The derived type can
expose all the method and properties of the COM object
as well as methods and properties implemented in managed
code. The resulting object is partly implemented in
managed code and partly implemented in unmanaged code.
Suppose I call a COM object from a .NET application, but
COM object throws an error. What happens on the .NET
COM methods report errors by returning HRESULTs; .NET
methods report them by throwing exceptions. The runtime
handles the transition between the two. Each exception
class in the .NET Framework maps to an HRESULT.