在非托管 C++ DLL 和托管 C# UI 之间发送信息

Posted

技术标签:

【中文标题】在非托管 C++ DLL 和托管 C# UI 之间发送信息【英文标题】:Sending information between a unmanaged C++ DLL and a managed C# UI 【发布时间】:2013-11-28 17:17:25 【问题描述】:

好的,场景如下。

Application1 能够加载和调用非托管 C++ DLL。

我想用 C# 编写另一个用户界面,让我的生活更轻松。

然后我希望 DLL 能够向 C# 可执行文件发送信息,并且 C# 可执行文件能够向 DLL 发送信息。

来回传递的信息并不复杂。它只是一个字符串。

关于如何做到这一点的任何想法。

【问题讨论】:

您尝试过/是​​否已经在此站点上搜索过?我很确定现有问题已经涵盖了这一点。 DLL 通常没有自己的生命,就像进程一样。您必须调用导出的函数才能使其执行某些操作。或者让它返回一些东西。只是参数和函数返回值。 【参考方案1】:

This 应该回答你的问题。基本上最简单的选项是 Named Pipes 用于在同一台机器上进行通信,Sockets 用于不同的机器。更新 经过更好的考虑,答案取决于“谁在控制?”在您的场景中。 1. 如果 C# 可执行文件负责调用您的非托管 DLL 并发送/检索信息,那么您应该使用 Platform Invoke。 2. 如果您希望您的非托管 DLL 决定何时向应用程序发送数据,那么首先您应该将您的 DLL 转换为完整的应用程序,然后使用interprocess communication。

【讨论】:

你确定这个答案吗?管道和套接字用于进程间通信。 OP 正在进行进程内通信。 @TooTone,我想我没有完全理解这个问题,所以我更新了答案,谢谢你的提示。

以上是关于在非托管 C++ DLL 和托管 C# UI 之间发送信息的主要内容,如果未能解决你的问题,请参考以下文章

如何在非托管 c++ dll 中查找调用方程序集名称

在 C# 中传递 IntPtr 指针后,在非托管 C++ 代码中分配数组,编组类型

如何在托管 (C#) 和非托管 (C++) 代码之间来回传递数组内容

dllimport如何在非托管dll中获取哪个应用程序调用了函数

在 C# 和非托管 C++ 之间传递自定义对象

如何将数据从非托管应用程序传递到 C# COM DLL