Native C++ Wrapper Managed C++

1.建一个Managed C++ 工程.

 

2. ManagedType 类:

    ManagedType.h

   

#pragma

once 

 

using

namespace System;

 

public ref

class ManagedType

 

 

 

{

 

 

public:

 

 

        ManagedType(void);

        ManagedType(String^ Name);

        void SetName(String^ name );

        String^ GetName();

private:

        String^ m_Name;

};

  

 

namespace

Init

 

{

 

 

 

    public ref class InitUtils

 

 

 

 

 

 

   {

  public:

 

 

 

      void static InitSystemStaticManagedType(String^ name);

 

 

 

      static ManagedType^ SystemStaticManagedType ;

 

 

 

 

   };

}//end namespace

 

 

 

 

    ManagedType.cpp

   

 

#include

"StdAfx.h" 

#include

"ManagedType.h" 

 

  

ManagedType

::ManagedType(void)

{

}

 

 

ManagedType

::ManagedType(String^ Name)

{   

 

    m_Name = Name;

}

 

 

void

ManagedType::SetName(String^ name )

{    

 

    m_Name = name;

 

String

^ ManagedType::GetName()

{

 

 

    return m_Name;

}

 

 

namespace

Init 

{

 

 

 

     void InitUtils::InitSystemStaticManagedType(String^ name)  

     {

         SystemStaticManagedType = gcnew ManagedType( name);

       }

}//end namespace

 

 

 

3. NativeTypeImp类

     NativeTypeImp.h

 

#pragma

once

#include

<vcclr.h> 

#include

<iostream> 

#include

"ManagedType.h"

 

 

using

namespace std;

class

NativeTypeImp

{

public

: 

      NativeTypeImp(ManagedType^ managedType);

 

 

      ~NativeTypeImp(void);

         wstring getName(); 

      static NativeTypeImp* getSystemStaticNativeImpType();

 

private

: 

       wstring m_Name;

 

 

       gcroot<ManagedType^> m_ManagedType;

};

 

  

     NativeTypeImp.cpp

  

 

#include

"StdAfx.h" 

#include

"NativeTypeImp.h" 

#include

<vcclr.h> 

#include

"ManagedType.h"

  

//#pragma unmanaged will lead to error

 

 

NativeTypeImp

::NativeTypeImp(ManagedType^ managedType)

{

 

 

      m_ManagedType = managedType;

}

 

 

NativeTypeImp

::~NativeTypeImp(void)

{

}

 

 

NativeTypeImp

* NativeTypeImp::getSystemStaticNativeImpType()

{   

 

   NativeTypeImp* imp = new       NativeTypeImpInit::InitUtils::SystemStaticManagedType );

 

 

    return imp;

}

 

 

wstring

NativeTypeImp::getName()

{

 

 

 

    if( m_Name.empty() ) 

    {

 

 

 

        ManagedType^ type = (ManagedType^) m_ManagedType;

         pin_ptr<const wchar_t> wch = PtrToStringChars( type->GetName() ); 

 

 

        m_Name = wch; 

      } 

 

 

      return m_Name;

}

 

 

 

 

3. NativeType类

    NativeType.h 

 

#pragma

once

 

 

 

 

 

 

 

 

 

 

//#include "NativeTypeImp.h"

#include

<iostream>

using

namespace std;

class

NativeTypeImp;

class

NativeType

{

 

public

:

 

 

       __declspec ( dllimport ) NativeType ();

 

 

       __declspec ( dllimport ) ~ NativeType ();

 

 

       __declspec ( dllimport ) wstring getName ();

private

:

       NativeTypeImp *m_imp;

};

 

    NativeType.cpp

 

#include

"StdAfx.h"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include

"NativeType.h"

#include

"NativeTypeImp.h"

#pragma

unmanaged

NativeType

::NativeType()

{

   

m_imp = NULL;

 

 

    m_imp = NativeTypeImp::getSystemStaticNativeImpType();

}

 

NativeType

::~NativeType()

{

   

delete m_imp;

}

wstring

NativeType::getName()

{

   

if( m_imp != NULL )

 

 

    {

       return m_imp->getName();

     }

     else

       return NULL;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值