首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从VB6动态链接库中打开WPF?

如何从VB6动态链接库中打开WPF?
EN

Stack Overflow用户
提问于 2012-08-14 05:54:57
回答 3查看 1.1K关注 0票数 0

这是一个关于设计方法的问题。我有有限的COM经验和一些WCF经验。我的约束是由应用程序环境提供的,但我有一定的设计灵活性。

在WPF中,我需要启动VB6应用程序并与之通信。WPF应用程序目前是一个可执行文件,但如果有帮助,我可以将其作为库。我想提供WPF和VB6应用程序之间的双向通信。我可以灵活地调整VB6动态链接库的设计。

我正在用VS2010和.NET 4开发C#。

我应该使用多少个组件?我可以使用VB6动态链接库在进程中启动WPF应用程序吗?它们之间是否应该有第三个组件?COM+能起到有用的作用吗?我必须使整个WPF应用程序COM可见吗?这样做有什么不好的地方吗?

我正在寻找一种我可以设计原型的设计方法。我愿意研究一下细节。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-14 06:29:41

我会的

  1. 使用WCF从WPF应用程序创建一个Web服务。我会抽象出WPF应用程序应该被远程访问的那些方面。这将显式地不包括任何用户界面代码。
  2. 我将创建一个简单的类库项目,并使用“添加服务引用”来添加对WCF服务的引用。
  3. 我将使类库的方法COM可见
  4. 我将从VB6

调用这些方法

这样做的好处是从等式中消除了对用户界面的任何考虑。

票数 1
EN

Stack Overflow用户

发布于 2012-08-14 06:07:15

在可用的选项中,我更喜欢COM选项而不是“启动另一个进程”选项,因为它更简单,即应用程序之间的通信将通过方法调用而不是WCF或任何类似的方式进行。

我假设你的VB DLL驻留在一个窗口进程中,而不是一个服务或web应用程序中。您只需要将任何公开的类型标记为COM可见,即类、它们的参数和返回类型。

您可能必须将您的WPF包装在windows forms ElementHost 1中,但我不确定,请尝试并查看。

我不确定你是否在你的搜索中看到了这个2,它听起来可行但不受支持,只要你没有太多的事情发生就可以。

1

2

票数 1
EN

Stack Overflow用户

发布于 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排除在外。如果这不是一个选择,那么你有许多选择,我的解释只是其中之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11942899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档