[.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。
首先用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。
相关文章推荐
- !!! 从MFC到.NET的痛苦转变(ISO C++ -----C++ CLI) !!!有好书介绍
- C++\CLI使用.net委托,*Callback注意"this"
- 从MFC到.NET的痛苦转变(ISO C++ -----C++ CLI)
- 从MFC到.NET的痛苦转变(ISO C++ -----C++ CLI)
- !!! 从MFC到.NET的痛苦转变(ISO C++ -----C++ CLI) !!!有好书介绍
- 我看C++/CLI和.NET
- .net中 CLI/C++中混合类的使用[CAutoNativePtr智能指针]
- [CLI/C++].NET托管代码和非托管代码的相互调用
- 《正版分享》2014年传智播客.NET JAVA 安卓 C/C# C++ PHP IOS WIN8 平面设计 视频教程
- 浅谈C++和C#的区别&C#与.NET的关系
- [C++/CLI编程宝典][5]编译与反汇编
- C++:C++/CLI
- 《转换指南: 将程序从托管扩展C++迁移到C++/CLI》译后记
- Native C++中调用C++/C#/VB托管程序集(用C++保护.NET程序)
- [C++/CLI编程宝典][2]什么是C++/CLI语言
- 实例解析C++/CLI之头文件、内联函数与数组
- 实例解析C++/CLI线程之多任务
- 学习C++/CLI
- 打破沙锅------什么是C++/Cli?
- c++ 与 .net类型对照(大杂会)