|
.NET and COM interview questions
1) 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.
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.
How do you call unmanaged methods from your .NET code
through PInvoke? 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 signatures.
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
possible? 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 applicaiton, but COM
object throws an error. What happens on the .NET end? 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. |
|