Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

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;

Community Additions

© 2015 Microsoft