背景:
用户要求我们提供给他们API,如果这些API都是用C#写的DLL,而用户要求API为C++的 DLL,这种情况下如果不重写API,就需要将C# DLL里面的内容封装成C++ DLL,再将C++DLL提供给他们。
这里针对c#中的事件,记录一下如何使用C++来封装c#的事件:
1.创建一个简单的C# DLL实例:
a.新建一个c# DLL项目,取名:TestDotNetDLL,添加一个类:Customer,这个类里面有两个属性、一个自定义委托和三个事件(将要对这三种事件进行封装):
public class Customer
{
private string _surname = "Default";
private int _age = 20;
public string Surname
{
get
{
return _surname;
}
set
{
_surname = value;
}
}
public int Age
{
get { return _age; }
set { _age = value; }
}
public delegate void MyEventHandler(object sender, MyEventArgs e); //自定义委托
//三个事件
public event EventHandler OnMyTestEvent; //默认委托型事件
public event MyEventHandler OnMyTestEvent1; //自定义委托事件
public event EventHandler<MyEventArgs> OnMyTestEvent2; //泛型委托事件
}
b.在添加一个类型:MyEventArgs,继承自:EventArgs,包含两个额外属性:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestDotNetDLL
{
public class MyEventArgs : EventArgs
{
#region Properties
private string _surname="XiaoHong";
private int _age=17;
public string Surname
{
get
{
return _surname;
}
set
{
_surname = value;
}
}
public int Age
{
get
{
return _age;
}
set
{
_age = value;
}
}
#endregion
}
}
2.新建一个C++DLL空项目,取名:CplusplusDLLUsingDotNetDLL,用来封装刚刚新建的C# DLL
a.在项目属性中设置一下:Common Language Runtime Support (/clr)
b.在common properties中添加引用C# DLL: