[.NET]C++/CLI and C# Interoperability

这是一个实现了native c++ code和mananged c++ code以及c# code相互调用的例子。

首先用visual studio 2005创建一个clr支持的project,选择目生成为dll,创建两个类,一个是native的,一个是托管的。

 

// UnManaged.h
namespace  USharedLib
{
    
class  CUnmanaged
    
{
    
public:
        CUnmanaged(
void);
        
void AddNumber(int number);
        
int GetTheResult();
    
private:
        
int m_Total;
    }
;
}

 

//  UnManaged.cpp
#include  " UnManaged.h "
namespace  USharedLib
{
    CUnmanaged::CUnmanaged(
void)
    
{
        m_Total 
= 0;
    }

    
//add to the internal integer
    void CUnmanaged::AddNumber(int number)
    
{
        m_Total 
+= number;
    }

    
//retrieve the current total
    int CUnmanaged::GetTheResult()
    
{
        
return m_Total;
    }

}

然后是托管的c++ code,调用native c++的code。

 

// Managed.h
#include  " UnManaged.h "
using   namespace  System;
namespace  MClassLib
{
    
//a managed wrapper for an unmanaged C++ class
    public ref class Managed
    
{

    
public:
        Managed(
void);
        
~Managed(void);
        
int AddTheNumbers(int numA, int numB);
    
private:
        
//pointer to the unmanaged object
        USharedLib::CUnmanaged* m_pUnmanagedObj;
    }
;
}

对应的cpp文件:

 

// Managed.cpp
#include  " Managed.h "
#define  NULL 0
namespace  MClassLib
{
    Managed::Managed(
void)
    
{
        
//create an instance of the unmanaged class
        m_pUnmanagedObj
            
= new USharedLib::CUnmanaged();
    }

    Managed::
~Managed(void)
    
{
        
//delete the unmanaged memory we allocated
        delete m_pUnmanagedObj;
        m_pUnmanagedObj 
= NULL;
    }

    
int Managed::AddTheNumbers(int numA, int numB)
    
{
        
//call the methods of the unmanaged object
        m_pUnmanagedObj->AddNumber(numA);
        m_pUnmanagedObj
->AddNumber(numB);
        
return m_pUnmanagedObj->GetTheResult();
    }

}

然后新建一个c#的project,别忘了添加引用到刚才的c++ project,然后创建一个c# 文件如下:

 

using  System;
using  System.Collections.Generic;
using  System.Text;
using  MClassLib;

namespace  Test
{
    
class Test
    
{
        
static void Main(string[] args)
        
{
            Managed obj 
= new Managed();
            
int result = obj.AddTheNumbers(12);

            Console.WriteLine(
"AddTheNumbers result: {0}", result);
        }

    }

}

c# code 调用托管的c++ code。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值