您的位置:首页 > 编程语言 > C语言/C++

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

2007-09-02 16:13 288 查看
这是一个实现了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(1, 2);




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


}


}


}



c# code 调用托管的c++ code。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: