How to: Wrap Native Class for Use by C#


The new home for Visual Studio documentation is Visual Studio 2017 Documentation on

The latest version of this topic can be found at How to: Wrap Native Class for Use by C#.

This sample shows how to wrap a native C++ class so it can be consumed by code authored in C#, or other .NET language.

// wrap_native_class_for_mgd_consumption.cpp  
// compile with: /clr /LD  
#include <windows.h>  
#include <vcclr.h>  
#using <System.dll>  
using namespace System;  
class UnmanagedClass {  
   LPCWSTR GetPropertyA() { return 0; }  
   void MethodB( LPCWSTR ) {}  
public ref class ManagedClass {  
   // Allocate the native object on the C++ Heap via a constructor  
   ManagedClass() : m_Impl( new UnmanagedClass ) {}  
   // Deallocate the native object on a destructor  
   ~ManagedClass() {  
      delete m_Impl;  
   // Deallocate the native object on the finalizer just in case no destructor is called  
   !ManagedClass() {  
      delete m_Impl;  
   property String ^  get_PropertyA {  
      String ^ get() {  
         return gcnew String( m_Impl->GetPropertyA());  
   void MethodB( String ^ theString ) {  
      pin_ptr<const WCHAR> str = PtrToStringChars(theString);  
   UnmanagedClass * m_Impl;  

Using C++ Interop (Implicit PInvoke)