C++ 到 C# 事件处理
Posted
技术标签:
【中文标题】C++ 到 C# 事件处理【英文标题】:C++ to C# event handling 【发布时间】:2011-09-30 10:42:05 【问题描述】:所以我得到了我的 C# WinForm 应用程序,我从中调用了我的 C++ CLI MFC dll 库。
但我的 C++ 库中有一些事件,即使这些事件发生在该库的本机(非 CLI)部分。我需要从我的 C# 应用程序中调用一些代码,并在此事件中获取一些数据。
所以当从客户端调用这个原生函数时:
bool __stdcall ClassName::WorkQuery()
......
switch(pp->code)
case READCOMPLEX:
..........
我需要从 C# 中获取数据所以我需要以某种方式将其注册为事件。
【问题讨论】:
您的活动是什么样的?我认为事件是 .Net 的东西,而不是 C++ 的东西......你有任何可以分享的示例代码签名吗? 所以我的原生 C++ 部分的工作方式与运行服务器类似(甚至不是我的代码),并且有标准 C++ 函数在客户端请求某些数据时调用。 那么“事件”是什么意思?这是某种应该像活动一样运作的公共财产吗?如果是这样,你可以分享它的签名吗?还是您只是想以某种方式找出某个 C++ 函数何时被调用(内部)? 我只想从这个函数调用 C# 部分而不处理这个函数本身,我什至不确定这是否可以处理原生 C++ 函数。我称之为它甚至只是因为它发生在随机时间。 c++/cli pass (managed) delegate to unmanaged code 的可能重复项 【参考方案1】:所以问题是您需要运行 C# 代码来响应 MFC 事件(或 C++ 回调),对吗?
您为什么不能只向本机事件/回调注册一个本机处理程序,然后它只调用一个 .NET 事件,该事件可以从 C# 中使用。
【讨论】:
+1;这个答案似乎是一个很好的解决方案。也许代码示例是有序的【参考方案2】:您可以从 C++/CLI 事件句柄创建一个 .NET 事件,然后在本机使用它。只需使用 EventWaitHandle 或派生的 AutoResetEvent 和 ManualResetEvent。
【讨论】:
不,我已经有了一个函数,当有事情发生时会调用它,我怎样才能将事件附加到它? 您将事件与事件混淆了。在非托管的 WIN32 世界中,事件是发生某事的通知,不要与 C#“事件”对象混淆。 EventWaitHandle 是 WIN32 事件的 C# 版本,可用于监听原始事件,然后调用您的 C#“事件”。 @MahmoudAl-Qudsi:我很确定你是一个让事件与事件混淆的人。这个问题对内核事件没有任何要求。以上是关于C++ 到 C# 事件处理的主要内容,如果未能解决你的问题,请参考以下文章