在VB6应用程序和.NET应用程序之间传递数据

4
我需要在vb6应用程序和.net应用程序之间传递数据,这些数据将每秒进行读写操作,大约有30个字段。这两个应用程序都在同一台计算机上运行。目前我通过注册表来传递数据,虽然它很好用,但是也让我有些紧张。我想使用文本文件来实现这个功能,但我担心会出现数据丢失的问题。请问哪种方法最好?

2
相当可怕。这不是注册表的预期用途。你听说过注册表分段吗? - Bob77
4个回答

2
我建议使用某种RPC进程来共享信息,如果您想轻松地完成这个任务。
最简单的可能是XML-RPCVB6.Net似乎都有必要的库。
如果您担心数据丢失,也可以连接到同一个数据库。

1

常见的后端?是的,注册表可以工作,文本文件也可以,但在多用户环境中,最好使用数据库(例如MS Access或SQL Server)。


1
+1. 在多进程环境下,SQL Server 可能更好。也许可以考虑使用 SQL Server Compact。 - MarkJ
1
数据库可能是IPC中成本最高的形式。 - Bob77
好的,贵一些,但是如果你不得不雇用DBA的话,它会比注册表或文本文件更好地处理多用户更新。 - Beth
是的,我同意,Access更便宜。这取决于问题的规模。我们这里有一个Teradata服务器... - Beth
我认为,使用数据库时,您需要像使用文件一样轮询更改,但是您还需要消耗更多的磁盘、内存和原始循环 - 可能需要维护更多的代码。再加上一个“田野百合”(即数据库管理员),情况就会变得更糟。 - Bob77
显示剩余2条评论

1

Mailslots在机器之间也可以正常工作。尽管它们不适用于超过400字节的消息。

DDE仍然得到支持,并且速度非常快。但可能没有.Net支持。

当然,基于进程外COM的简单层只是在Windows RPC之上的薄层。


我也考虑过DDE。在VB6时代,它是首选答案,我敢打赌有一些.NET代码可以让它工作。 - JohnFx
但是有一些注意事项,这并不是R. Chen最喜欢的东西:http://blogs.msdn.com/b/oldnewthing/archive/2007/02/26/1763683.aspx - Bob77
@Bob:“邮槽在不同机器之间也可以正常工作” - 通常情况下是可以的,但不能保证消息的接收。 - rskar
这是一个有价值的观点,同样也适用于UDP数据报。幸运的是,在这种情况下,他的进程在一台机器上,所以这不会给他带来麻烦。 - Bob77
我已经尝试过 Ndde。但是 DDE 服务器一直被锁定,唯一的解决方法就是重启。 - jocoder
上面的Raymond Chen链接表明,.Net无论如何都不支持DDE。 "Ndde"是一个打字错误吗?NetDDE是另一回事,而且它在一段时间内肯定失去了支持 - 尽管我认为我读到过一些第三方仍然提供解决方案的信息。 - Bob77

0

选择你的方式:邮槽、内存映射文件、命名管道、套接字。这些都有很多网络上的帮助和代码。

在同一台机器上的进程之间传递小消息(两个都是Windows操作系统):使用邮槽。

在同一台机器上的进程之间传递大块数据:使用内存映射文件。

在进程之间流式传输消息(同一台或不同的机器,都是Windows操作系统):使用命名管道。

在进程之间流式传输消息(同一台或不同的机器,同一种或不同的操作系统):使用套接字。


既然你现在正在使用注册表,也许可以考虑使用邮槽。


@jocoder:有两个地方可以查看。首先,在http://www.codeproject.com/Articles/19231/Fully-functional-Asynchronous-Mailslot-Control-in上有一个C#项目。 - rskar
@jocoder:其次,这是某人的VB代码,大部分都可以正常工作(尽管他遇到了一些问题):http://forums.devx.com/archive/index.php/t-160327.html - rskar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接