这是一个关于设计方法的问题。我有限的COM经验和一点WCF经验。我的约束是由应用程序环境给出的,但我有一些设计灵活性。
在VB6 dll中,我需要启动并与WPF应用程序通信。 WPF应用程序目前是一个exe,但如果有帮助,我可以把它变成一个库。我想在VB6 DLL和WPF应用程序之间提供双向通信。我有一些灵活性来调整VB6 DLL的设计。
我正在使用VS2010和.NET 4开发C#。
我应该使用多少个组件?我可以用VB6 dll启动WPF应用程序In-Proc吗?他们之间应该有第三个组成部分吗? COM +可以发挥有用的作用吗?我是否必须使整个WPF应用程序COM可见?这样做有不妥之处吗?
我正在寻找一种可以原型化的设计方法。我愿意研究细节。
答案 0 :(得分:1)
在可用的选项中,我更喜欢COM选项而不是'启动另一个进程'选项,因为简单的“应用程序”通信将通过方法调用而不是WCF或类似的东西。
我假设您的VB DLL位于窗口进程中,而不是服务或Web应用程序。您只需要将任何公开的类型标记为COM可见,即类,它们的参数和返回类型。
你可能需要将你的WPF UI包装在windows表单ElementHost [1]中,但我不确定,试试看看。
我不确定你是否在你的搜索中看到了这个[2],它听起来可行但不受支持,只要你没有太多的事情就可以了。
[1] http://msdn.microsoft.com/en-us/library/system.windows.forms.integration.elementhost.aspx
[2] http://social.msdn.microsoft.com/forums/en-US/wpf/thread/7555ba6a-1359-4dfe-aa23-c31a8f121142/
答案 1 :(得分:1)
我会
这样可以从等式中删除用户界面的任何注意事项。
答案 2 :(得分:1)
我在一个主要用VB6编写的应用程序上工作,但是大多数最近的代码是用.net编写的,内置了WPF和一些WinForms的UI组件。此应用程序的数据源是WCF,MSSQL服务器和基于Unix的基于unix的服务器。所有WCF调用都是由.net UI组件引用的数据访问组件构成的。
您可以在VB6窗口或其他容器控件中托管WPF。首先获取Interop Forms Toolkit并构建shell用户控件来托管WPF控件。
为了能够在这些控件中托管WPF,您需要构建一个包含ElementHost的WinForms用户控件,您可以将内容设置为WPF用户控件。
WPF Usercontrol
在一个元件主机内部 WinForms用户控件内部VB6用户控件或 窗口
互操作工具包将需要构建VB.Net代码,但您可以在C#中完成,但我还没有尝试过。由interop工具包创建的用户控件将作为COM组件公开,您可以通过Project>将它们添加为组件来引用VB6。组件,然后您将在工具箱中找到它们。
在数据源(WCF,数据库)等方面,你应该在直接从UI组件引用的.net组件中构建所有数据访问,不要试图回调到VB6库,你可能只是创建一团糟。
在我的应用程序中,我还有一个配置部分,我从VB6应用程序启动调用它为所有.net组件设置一个IoC容器。
从最佳实践方法来看,我实际上建议将VB6代码重写为.net并将VB6放在图片之外。如果这不是一个选项,那么你有很多选择,我的解释只是其中之一。