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

Posted

技术标签:

【中文标题】在 VB6 应用程序和 .Net 应用程序之间传递数据【英文标题】:Pass data between VB6 app and .Net app 【发布时间】:2012-01-27 17:07:23 【问题描述】:

我需要在 vb6 应用程序和 .net 应用程序之间传递数据。该数据将每秒写入或读取一次。它大约有30个字段。两个应用程序都驻留在同一台机器上。我目前正在通过注册表传递这些数据,它工作得很好,但这让我有点紧张。我会用文本文件来做,但我担心数据丢失。

最好的方法是什么?

【问题讨论】:

相当可怕。这不是注册表的目的。听说过注册表配置单元碎片吗? 【参考方案1】:

如果您想轻松地共享信息,我建议您使用某种 RPC 进程。

最简单的可能是XML-RPC

VB6 和 .Net 似乎都有必要的库。

如果您担心数据丢失,也可以连接到同一个数据库。

【讨论】:

【参考方案2】:

通用后端?是的,注册表有效,文本文件有效,但在多用户环境中,最好使用数据库(例如 MS Access 或 SQL Server。)

【讨论】:

+1。 SQL Server 在多进程环境中可能更好。也许SQL Server Compact 数据库可能是最昂贵的 IPC 形式。 好的,很贵,是的,特别是如果您必须聘请 DBA,但它会比注册表或文本文件更好地处理多用户更新。 当一个简单的文件就可以完成时,SQL 服务器似乎太过分了。 是的,我同意,Access 更便宜。取决于问题有多大。我们这里有一个 Teradata 服务器...【参考方案3】:

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

DDE 仍然受支持,而且速度非常快。但是可能不支持 .Net。

当然,简单的进程外 COM 只是 Windows RPC 之上的一个薄层。

【讨论】:

我也想过 DDE。这是 VB6 时代的首选答案,我敢打赌,那里有一些 .NET 代码可以实现这一目标。 但有一点需要注意,这不是 R. Chen 最喜欢的东西:blogs.msdn.com/b/oldnewthing/archive/2007/02/26/1763683.aspx @Bob:“邮件槽在机器之间也可以正常工作” - 通常可以,但不能保证收到消息。 这是一个有效的观点,UDP 数据报也是如此。幸运的是,在这种情况下,他的进程在一台机器上,所以不会给他带来麻烦。 我已经尝试过 Ndde。 dde 服务器一直处于锁定状态,释放它的唯一方法是重新启动。【参考方案4】:

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

同一台机器上的进程之间的小消息(Windows 操作系统):使用 MailSlots。

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

进程之间的流式消息(相同或不同的机器,Windows 操作系统):使用命名管道。

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


由于您现在使用的是注册表,所以可能是 Mailslots。

【讨论】:

@jocoder:有两个地方可以查看。首先,codeproject.com/Articles/19231/… 的 C# 项目 @jocoder:其次,这是某人的 VB 代码,大部分都可以工作(尽管他有问题):forums.devx.com/archive/index.php/t-160327.html

以上是关于在 VB6 应用程序和 .Net 应用程序之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

在 CruiseControl.net 中构建 VB6 应用程序的 DCOM 问题

Vista 中的 VB6 .NET 互操作问题

如何保护Vb6应用程序和mssql服务器之间的连接?

如何使用 IPC 将数据从 ActiveX 对象传递到 VB6 应用程序 - (单实例应用程序)?

在 SharePoint Web 应用程序和 ASP.NET Web 应用程序之间传递用户凭据

使用 .NET 在 Angular 和 Cosmos DB 之间传递“纯”(无类)json