English 中文(简体)
在C++和C#应用程序之间异步通信的最简单方法是什么
原标题:What is the simplest way to asynchronously communicate between C++ and C# applications

我有一个C++应用程序,它需要与运行在同一台机器上的C#应用程序(一个windows服务)通信。我希望C++应用程序能够写尽可能多的消息,而不需要知道或关心C#应用程序何时/是否在阅读这些消息,甚至不需要关心它是否在运行。即使C++应用程序已经关闭,C#应用程序也应该能够不时醒来并请求最新消息。

实现这一点最简单的方法是什么?我认为这种事情就是MSMQ的作用,但我还没有找到在C++中实现它的好方法。我现在正在使用NamedPipes,但这并没有真正实现,因为我的操作方式需要两个应用程序之间的连接,并且在读取之前需要对WriteLine块进行C++调用。

目前,我能想到的最好的解决方案是将消息写入一个文件,在每个消息上都有一个时间戳,C#应用程序会根据其上次更新时间戳定期检查。不过,这似乎有点粗鲁。

实现这种消息传递的最简单方法是什么?

最佳回答

实际上,最简单的方法是使用一个文件来存储消息。不过,我建议使用像SQLite这样的嵌入式数据库:其优点是更好的性能和查询更改的好方法(即SELECT*FROM消息WHERE timestamp>;last_app_start)。

问题回答

我会使用一个命名管道。

MSMQ听起来确实像你想要的,或者更基本的读取和写入写入公共区域的文件,但你需要注意文件上的争用。

MSMQ上的VC++帮助

这两个应用程序并不总是同时运行,但仍然能够相互发送消息,这无疑意味着您需要第三个组件来存储/排队消息。无论你是使用共享数据库/文件,还是编写第三个用作消息存储的应用程序,都取决于你。无论哪种方式,你都会发现共享总是会引起争论。

就我个人而言,我会在MSMQ之前考虑0MQ,但两者都不能解决您的问题。sqlite数据库将是我的第一选择。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签