这是一个实现了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实现的跨语言调用示例,包括从托管C++调用非托管C++,再到C#的调用过程。示例通过创建一个DLL,定义了非托管C++类进行数值处理,并通过托管C++包装该类供C#调用。
3053

被折叠的 条评论
为什么被折叠?



