【问题标题】:Interapp communication between .net and vb6.net 和 vb6 之间的应用程序间通信
【发布时间】:2012-02-25 02:00:46
【问题描述】:

我看到一篇很好的文章解释了如何让 .net 应用程序直接相互通信 (http://ryanfarley.com/blog/archive/2004/05/10/605.aspx),但它涉及覆盖 WndProc你的表单中的方法,我显然不能在 vb6 中做。

还有其他可以在 vb6 中使用的应用程序间通信方法吗?

我即将在 .net 中开始一个新项目,但是有一些 vb6 表单我将无法在需要它们时立即移植。在考虑了几种不同的设计后,我决定最好让 vb6 应用程序在后台运行,并且当通知这样做时,它可以呈现我需要的任何表单,然后通知 .net 应用程序当表单关闭时。

【问题讨论】:

  • 另外,我更喜欢不需要任何额外依赖的东西......例如,如果可以避免的话,我不想设置 msmq 或类似的东西。
  • 在VB6中覆盖window proc是非常可能的,只要看看子类化。
  • @Deanna,谢谢。我发现了一段非常棒的代码,它使用管道做我想要的,但我一定会记住这一点,以防我需要它。

标签: .net vb6 communication


【解决方案1】:

有很多选择。如果你说的更多关于你的要求,我可以提供更详细的答案。

同时,看看命名管道:

http://support.microsoft.com/kb/871044

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365590(v=vs.85).aspx

如果您的程序驻留在不同的服务器上:

http://msdn.microsoft.com/en-us/library/bb546085.aspx

它们是一种可靠的进程间通信方法,不需要任何特定的操作系统设置,适用于 .NET 和 VB6。

【讨论】:

  • 谢谢。我在帖子中添加了一些关于我想要完成的工作的信息。
  • 您应该能够使用命名管道来实现这一点。只需使用管道两种方式将消息“显示表单 X”发送到 VB6,并将“完成表单 X”发送回 .NET。
  • 是的,这看起来是个不错的方法。我正在关注您发布的第一个链接中的示例,但使用 c# 编写。我不确定的一件事是如何在 c# 中表达像 &H80S 这样的十六进制值。我知道在 c# 中你会在它们前面加上 '0x',但你知道最后的 S 是什么意思吗?
  • 那就是 0x80。我认为 S 分配给带符号的类型。如果你只使用(有符号的)int,你应该得到相同的结果int i = 0x80
  • 您的第一个链接使用 P/Invoke 调用 Win32 API。使用 .Net 内置的支持肯定更容易,就像在您的第三个链接中一样?
【解决方案2】:

您可以让您的 VB6 EXE 成为 ActiveX EXE(COM 服务器),然后让 .Net 组件通过 COM 互操作调用它。 IE。只需 add a reference 到项目引用对话框的 COM 选项卡上的 VB6 EXE。

您也可以使用 WCF。在 .Net 中创建一个 COM 可见的 DLL 作为 WCF 通信的包装器,以便 VB6 可以参与。您可以使用命名管道:我建议在 COM 可见的 DLL 中使用内置的 .Net support,以便 VB6 可以调用它。

免责声明:我实际上并没有尝试过,但它确实应该比从 VB6 访问命名管道 API 更简单。

【讨论】:

  • 感谢所有建议。我认为命名管道解决方案看起来不错。是的,从 .net 为命名管道创建一个包装器肯定比尝试使用来自 vb6 的 API 更简单。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多