我们有一个用托管C ++(C ++ / CLI)编写的应用程序,它使用另一个用C#编写的库。将从托管代码引发一个事件,我们希望在托管C ++代码中处理该事件。
管理C#活动代码
using System;
namespace CSharpWithEvent
{
public class UpdateInfo
{
public string PropertyName { get; set; }
public int NewValue { get; set; }
}
public class ValueChangeEventArgs : EventArgs
{
private UpdateInfo _updatePacket;
public UpdateInfo UpdatePacket
{
get { return _updatePacket; }
set { _updatePacket = value; }
}
public ValueChangeEventArgs(UpdateInfo updatePacket)
{
_updatePacket = updatePacket;
}
}
public class ImageManager
{
private EventHandler<ValueChangeEventArgs> _onValueChanged;
public event EventHandler<ValueChangeEventArgs> OnValueChanged
{
add { _onValueChanged += value; }
remove { _onValueChanged -= value; }
}
/// <summary>
/// Method that is called to update Image.
/// </summary>
/// <param name="updatePacket"></param>
public void UpdateImage(UpdateInfo updatePacket)
{
/*Raised Event*/
if (_onValueChanged != null)
{
_onValueChanged(this, new ValueChangeEventArgs(updatePacket));
}
}
}
}
ImageUserClass.h的代码
#pragma once
#include "stdafx.h"
#include <vcclr.h>
using namespace std;
using namespace System;
using namespace CSharpWithEvent;
class ImageUserClass
{
public:
gcroot<ImageManager^> m_imageManager;
ImageUserClass();
void OnImageValueChange(Object^ sender, ValueChangeEventArgs^ updatePacket);
};
托管.cpp文件中的处理程序代码
#include "stdafx.h";
#include "ImageUserClass.h";
ImageUserClass::ImageUserClass()
{
m_imageManager = gcnew ImageManager();
m_imageManager->OnValueChanged += gcnew EventHandler<ValueChangeEventArgs^>(this, &ImageUserClass::OnImageValueChange);
}
void ImageUserClass::OnImageValueChange(Object^ sender, ValueChangeEventArgs^ updatePacket)
{
//TODO: Make necessary changes.
}
我已经实现并尝试处理该事件,但我收到了以下错误。
错误1错误C3364:'System :: EventHandler':委托构造函数的参数无效;委托目标需要是指向成员函数的指针
请帮我解决上述问题