您的事件需要是某个托管类的成员,可能是静态的。例如:
#include "stdafx.h"
#include "windows.h"
using namespace System;
struct WIN {
HWND Handle;
char ClassName;
char Title;
};
delegate void wDel(WIN);
ref class WindowEvents abstract sealed // abstract sealed ref class in c++/cli is like a static class in c#
{
public:
static event wDel^ wE;
static void GotWindow(WIN Window) {
wE(Window);
}
};
更新
如果您需要将 unmanaged 转换HWND
为IntPtr
,因为IntPtr
这是c# 中 HWND 的标准 P/Invoke 签名,您可能会考虑以下内容:
#include "stdafx.h"
#include "windows.h"
using namespace System;
#pragma managed(push,off)
struct WIN { // Unmanaged c++ struct encapsulating the unmanaged data.
HWND Handle;
char ClassName;
char Title;
};
#pragma managed(pop)
public value struct ManagedWIN // Managed c++/CLI translation of the above.
{
public:
IntPtr Handle; // Wrapper for an HWND
char ClassName;
char Title;
ManagedWIN(const WIN win) : Handle(win.Handle), ClassName(win.ClassName), Title(win.Title)
{
}
};
public delegate void wDel(ManagedWIN);
public ref class WindowEvents abstract sealed // abstract sealed ref class in c++/cli is like a static class in c#
{
public:
static event wDel^ wE;
internal:
static void GotWindow(WIN Window) {
wE(ManagedWIN(Window));
}
};
这里ManagedWIN
仅包含安全的 .Net 类型。