这是一个关于设计方法的问题。我有有限的COM经验和一些WCF经验。我的约束是由应用程序环境提供的,但我有一定的设计灵活性。
在WPF中,我需要启动VB6应用程序并与之通信。WPF应用程序目前是一个可执行文件,但如果有帮助,我可以将其作为库。我想提供WPF和VB6应用程序之间的双向通信。我可以灵活地调整VB6动态链接库的设计。
我正在用VS2010和.NET 4开发C#。
我应该使用多少个组件?我可以使用VB6动态链接库在进程中启动WPF应用程序吗?它们之间是否应该有第三个组件?COM+能起到有用的作用吗?我必须使整个WPF应用程序COM可见吗?这样做有什么不好的地方吗?
我正在寻找一种我可以设计原型的设计方法。我愿意研究一下细节。
发布于 2012-08-14 06:29:41
我会的
调用这些方法
这样做的好处是从等式中消除了对用户界面的任何考虑。
发布于 2012-08-14 06:07:15
在可用的选项中,我更喜欢COM选项而不是“启动另一个进程”选项,因为它更简单,即应用程序之间的通信将通过方法调用而不是WCF或任何类似的方式进行。
我假设你的VB DLL驻留在一个窗口进程中,而不是一个服务或web应用程序中。您只需要将任何公开的类型标记为COM可见,即类、它们的参数和返回类型。
您可能必须将您的WPF包装在windows forms ElementHost 1中,但我不确定,请尝试并查看。
我不确定你是否在你的搜索中看到了这个2,它听起来可行但不受支持,只要你没有太多的事情发生就可以。
1
2
发布于 2012-08-14 06:58:11
我使用的应用程序主要是用VB6编写的,但大多数最新的代码都是用.net编写的,其中包含用WPF和一些WinForms构建的UI组件。此应用程序的数据源是WCF、MSSQL服务器和基于unix的专用服务器。所有的.net调用都是通过WCF UI组件引用的数据访问组件进行的。
可以在VB6窗口或其他容器控件中承载WPF。首先获取Interop Forms Toolkit并生成外壳用户控件来承载您的WPF控件。
为了能够在这些控件中承载WPF,您需要构建一个包含ElementHost的WinForms用户控件,您可以设置WPF用户控件的内容。
WPF用户控件
在一个
图元主体
在一个
WinForms用户控件
在一个
VB6用户控件或window
互操作工具包想要构建VB.Net代码,但是您可以用C#来实现,尽管我还没有尝试过。互操作工具包创建的用户控件将被公开为COM组件,您可以通过项目>组件将它们添加为组件来引用VB6,然后您将在工具箱中找到它们。
在数据源(WCF,数据库)等方面,你应该在直接从UI组件引用的.net组件中构建所有的数据访问,不要试图回调VB6库,你可能会弄得一团糟。
在我的应用程序中,我还有一个配置节,我从VB6应用程序启动时调用它,为所有.net组件设置一个IoC容器。
从最佳实践的角度来看,我实际上建议将您的VB6代码重写为.net,并将VB6排除在外。如果这不是一个选择,那么你有许多选择,我的解释只是其中之一。
https://stackoverflow.com/questions/11942899
复制相似问题