Introduction:
In this article I cover the area Interoperability issues. There is no doubt that with the help of .Net one can create powerful components and Distributed applications than any other language. But we have to think over about the past reusable components, which were created by many languages such as VB etc.
Is it the Usage of those past components is end after evolving of .Net?
No we can use those components in the .Net and the .Net types in the Classic COM clients. Are there any possibilities of communication between managed and unmanaged types? Yes it is possible to make it possible to use existing COM objects (Unmanaged) from within managed applications and expose-managed objects to existing COM (Unmanaged) applications. Now let us see those things in detail.
In the first part of this article Part1, I focus on how .Net types calling c DLLs (Win32 API). In the Part2, I illustrate how you can Build a .NET Server Callable from COM clients and then in the latter Part-3, I will explain you that how you can Build a .NET Client That Uses a COM Server. Confidently, at the end of the article, you'd have achieved enough information to understand how Classic COM and the .NET framework can peacefully co-exist together. Hence if you're geared up, let's take an expedition through travel around how Classic COM can be used in the .NET world.
The .NET and COM Mediator.
.NET runtime affords COM Interoperability wrapper for overcoming the differences between .NET and COM environments. For example, runtime make an instance of COM Callable Wrapper (CCW) when a COM client accesses a .NET component. In the same way, an instance of Runtime Callable Wrapper (RCW) is formed when a .NET client accesses a COM component. These wrappers abstract the dissimilarity and provide the faultless incorporation between the two environments.
Part1--.NET TYPES CALLING C DLLs (Win32 API).
Platform Invoke:
The platform invoke services offers a method to call functions that are exported from an unmanaged DLL. The most distinctive use of PInvoke is to allow .Net components to interact with the Win32 API. PInvoke is also used to access functions exports defined in custom DLLs.
To exemplify the use of PInvoke I create a C# class that makes a call to theWin32 Message Box () function. Before we move into the C# class let us see an example program in VB 6.
The C prototype :
int MessageBox(Hwnd hwnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType);
Parameters.
hwnd ---> Handle to the dialog's owner.
lpText ---> The text you wish to display
lpCaption ---> The caption of the message box.
wType ---> The dialog definition. Ex: vbYesNo
Returns ---> Returns the value of the button that was clicked.
VB Declaration:
Private