2016-03-01 48 views
1

我是(最终!)将我们的VB6应用程序转换为.NET(C#)的过程。我想使用Winforms(我希望在那之后快速切换到MVC并使它们成为Web应用程序)。我们最近在Server 2012的VB6应用程序中出现了一些严重的奇怪问题,我怀疑这可能是MSCOMCTL.OCX引起的(实际上是提示重写)。我对这个OCX了解得越多,我越想远离它。我不知道如何找出.NET Winforms框架是否使用这些旧的ActiveX组件。我希望有人知道或可以指出我的发现方向。我想避免WPF的混乱学习曲线。.NET Winforms控件使用MSCOMCTL.OCX吗?

+0

默认情况下,它们不会(尽管*如果需要可以使用ActiveX控件) 。 –

+0

这并不回答你的问题,只是我的看法,但是...如果是我,我会继续前进,并将功能移到MVC WebAPI服务(或者更好的是自托管的WCF),然后它不管你指向哪个前端。它可以是WinForms,WPF,网页或任何组合。 – Kevin

+0

所以我会凯文,但它不是我的电话=(。谢谢马修。 – Belmiris

回答

3

编号

OCX扩展名表示ActiveX控件。它们确实被传统的基于COM的VB系统(最新的,最大的版本是VB 6)所使用,但它们并未被.NET Framework使用。 WinForms提供了它自己无关的通用控件的实现。相反,你会有一整套新的错误来应对!

请注意,you can use ActiveX controls with WinForms,如果您尝试使用某种自动转换向导将VB 6项目转换为.NET项目,这可能是您最终无意中做了什么。我不确定,这取决于你的向导的质量。通常,没有理由永远使用MSCOMCTL.OCX,因为所有常用控件都是由WinForms提供的,但是如果您的应用程序依赖于其他没有等效功能的ActiveX控件,转换向导很可能会尝试并重用它们。我不知道你在Server 2012的MSCOMCTL.OCX上遇到了什么问题,不应该有什么重大的问题,VB 6的应用程序可以继续在较新版本的Windows上运行,确保你是从cumulative update rollup运行该文件的最新版本。对一个简单的bug进行大规模重写似乎对我来说过分了。)

+0

MSCOMCTL.OCX已经陷入了安全问题,并且有许多KillBits(注册表项迫使ocx控件不能被加载,或者为另一个新的控件“建议”另一个guid)。如果您的程序中引用了ocx的不同版本(出于某种原因,在vb6表单中引用了ocx),它实际上会将一些依赖dll的2个实例加载到您的应用程序内存中。请注意,您无法关闭此实例中的ocx更新。 Visual Studio会忽略该设置,这使得使用相同版本的OCX保留所有文件非常困难。 – Belmiris

+0

'错误'是在随机的时间间隔 - 几小时或几天 - 突然我们的vb6应用程序名称实际上在任务管理器中是“空白的”。这实际上导致一些API调用崩溃(Process32Next)。与此同时,我们与我们的访问数据库的连接已经损坏(对于RDP上的所有用户!)。我们扫描了数十次病毒,创建了全新的服务器安装,但没有任何工作,直到我经历并将每个vbp和frm文件引用MSCOMCTL.OCX更改为2.0并重新编译该应用程序。这个问题几个星期没有发生。 – Belmiris

+0

这对我来说“闻起来就像一个记忆腐败问题,与某种共享资源结合在一起造成一个真正的混乱。 – Belmiris