2012-02-25 67 views
2

我看到了一篇很好的文章,解释了如何让.net应用程序直接相互通信(http://ryanfarley.com/blog/archive/2004/05/10/605.aspx) ,但它涉及覆盖您的窗体中的WndProc方法,这显然无法在vb6中完成。.net和vb6之间的Interapp通信

是否存在其他任何可以在vb6中使用的应用程序间通信方法?

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

+0

另外,宁愿不需要任何额外依赖项的东西...例如我不想安装msmq或类似的东西,如果我可以避免它。 – 2012-02-25 02:02:12

+2

在VB6中重写窗口proc是非常可能的,只需查看子类。 – Deanna 2012-02-27 10:11:50

+0

@Deanna,谢谢你。我发现了一个非常棒的代码,它使用管道来完成我想要的功能,但我一定会牢记这一点,以防万一我需要它。 – 2012-02-27 10:50:25

回答

4

有很多选择。如果您更多地了解您的要求,我可以提供更详细的答案。

在平均时间,看看命名管道:

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

他们是一对可靠的进程间通信方法,不需要任何特定的OS安装程序,可用于.NET和VB6。

+0

谢谢。我在我的帖子中添加了一些关于我想要完成的信息。 – 2012-02-25 03:12:33

+0

你应该可以用命名管道来完成。只需使用双向管道将消息“显示表单X”发送到VB6,并将“完成表单X”发送回.NET。 – 2012-02-25 03:25:35

+0

是的,这看起来很不错。我正在关注您发布的第一个链接中的示例,但使用c#编写。我不确定的一件事是如何在C#中使用&H80S表示十六进制值。我知道在C#中你用'0x'作为前缀,但是你知道S的结尾是什么吗? – 2012-02-25 03:29:44

1

你可以让你的VB6 EXE成为一个ActiveX EXE(COM服务器),然后让.NET组件通过COM interop调用它。即只需将add a reference复制到项目引用对话框的COM选项卡上的VB6 EXE。

或者你可以使用WCF。在.Net中创建一个COM可见的DLL以充当WCF通信的包装,以便VB6可以参与。您可以使用命名管道:我建议在COM可见的DLL中使用内置的.Net support,以便VB6可以调用它。免责声明:我没有真正尝试过,但它确实应该比从VB6访问命名管道API更简单。

+0

感谢您的所有建议。我认为命名管道解决方案看起来不错。是的,从.net为命名管道创建一个包装器肯定会比尝试使用vb6中的API更简单。 – 2012-02-26 07:26:39