C++ C# Interoperability

Three complementary technologies enable these managed/unmanaged interactions:

1. Platform Invoke (sometimes referred to as P/Invoke) enables calling any function in any unmanaged language as long as its signature is redeclared in managed source code. This is similar to the functionality that was provided by the Declare statement in Visual Basic® 6.0.

2. COM interop enables calling into COM components in any managed language in a manner similar to using normal managed components, and vice versa. COM interop is comprised of core services provided by the CLR, plus some tools and APIs in the System.Runtime.InteropServices namespace.

3. C++ interop (sometimes referred to as It Just Works (IJW)) is a C++-specific feature, which enables flat APIs and COM APIs to be used directly, as they have always been used. This is more powerful than COM interop, but it requires much more care. Make sure that you check the C++ resources before you use this technology.


.NET to C++ Bridge -

Interoperability Mini-Guide -

Calling Win32 DLLs in C# with P/Invoke -

P/Invoke Revisited - http://msdn2.microsoft.com/en-us/magazine/cc163910.aspx

Is PInvoke dead - http://weblogs.asp.net/kennykerr/archive/2005/06/20/Is-P_2F00_Invoke-Dead_3F00_.aspx

An Overview of Managed/Unmanaged Code Interoperability -

Chris Green's Unix/Windows and .Net/Java Interoperability Blog - http://blogs.msdn.com/chris.green/

Design Guidelines, Managed code and the .NET Framework - http://blogs.msdn.com/brada/articles/361363.aspx

C++ to C# comparisionhttp://esersahin.wordpress.com/2008/11/13/c-quick-equivalents/

Thread Synchronization (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/ms173179.aspx

C# Observer Pattern (using Delegates & Events) - http://msdn.microsoft.com/en-us/library/ms954621.aspx

Msdn Delegates - http://msdn.microsoft.com/en-us/magazine/cc159272.aspx

Events and Delegates - http://msdn.microsoft.com/en-us/library/17sde2xt(VS.71).aspx

Raising multiple events - http://msdn.microsoft.com/en-us/library/0sx1bz6x(VS.71).aspx