介绍 最近,一位顾客问有可能添加一些特定功能的程序。中的程序问题显示和实时流的力量,作用于各个轴的赛车。当时只是一个图片框控制版本与文本框VB6,等定位在图片显示的值。客户要求这个“图片”是根据窗口的大小,在大屏幕上这样会更容易阅读。 这个问题 把很简单,语言应用程序编写,VB6,没有提供很好的支持图形。这特别的调整图片比例,这是一个主要的客户需求。 解决方案 实现解决方案的时间是有限的,所以尽管不是完全不可能的,一个完整的软件VB的重写。网络并不是可行的。一种可能性本身是看一个控制使用。net编写可用于VB6应用程序使用COM互操作。事实证明,这是非常简单,但它背后所涉及的跑腿活儿显示相当多的死角。因此,本文的目的是为别人希望消除这些死角完成同样的事情。 第一阶段:创建控件 这花了最长的三个阶段在我们的例子中,仅仅因为控制的性质和计算文本的位置,等是定位。我不会深入探讨我们控制的细节,但只有VB6互操作所需的步骤。 创建一个新的Windows控制在Visual Studio内库项目。 在调试和发布模式的属性页面,设置“注册COM互操作”复选框。 AssemblyInfo.cs内部文件,改变组装ComVisible宽属性为true。如果这不是已经在配置文件中,添加它。 隐藏,复制代码[组装:ComVisible(真正的) 所需要的是使项目可见VB6项目。 属性 关于这些快速词:属性是暴露在VB6,像。net控件,如果你想让一个值,你必须把它在一个属性表达式。你不能把它作为一个领域可见。 阶段2:注册组装 图书馆必须注册在客户端机器上使用VB6。如果不是注册在开发机器上,那么它将不会出现在VB6的引用对话框。如果不是注册在安装机器,那么它就是一个类似的问题,如果你没有注册一个经典的DLL或ActiveX控件。“注册COM互操作”复选框在VS2005环境运行时自动执行这个注册,但当VS关闭取消它。 大会注册,您必须使用. net相当于regsvr32, regasm。这个位于框架目录,通常“C: WINDOWS Microsoft.NET framework v2.0.50727”。注册它,打开一个命令提示符运行以下命令,假设框架目录和程序集目录是在环境中当前的路径。 隐藏,复制Code
regasm.exe Assembly.dll
第三阶段:添加VB6项目 这里的秘密是VBControlExtender对象,它允许托管在一个VB6 . net控制形式。然而,第一阶段是将一个引用添加到组装你刚刚注册。这是通过检查框菜单项目|引用。 一旦已经完成,下面的代码可以被添加到表单的代码在这个项目: 隐藏,复制Code
Option Explicit Dim car As VBControlExtender Private Sub Form_Load() Set car = Controls.Add("CarControl.Car", "car", Me) End Sub
演示的源文件中包含的其他代码简单的基于表单的大小和尺寸控制集随机值的属性控制。 隐藏,复制Code
Private Sub Form_Resize() car.Left = 100 car.Width = Me.Width - 300 car.Top = 100 car.Height = Me.Height - 700 car.Visible = True End Sub Private Sub timer_Timer() ' Randomise the timer Randomize ' Generate random numbers car.object.FrontL = Rnd() car.object.FrontR = Rnd() car.object.RearL = Rnd() car.object.RearR = Rnd() End Sub
你会注意到我不得不把通过car.object。net控件的属性。这对VB6提供后期绑定功能。所有COM-Visible方法在。net控制通过该对象来访问。你只需要知道你在打字,因为它是通过后期绑定。 总结 希望我的能力(或缺乏)的一篇文章作者并没有掩盖了文章的重要部分,它是无法使用。我个人发现说明了一切,包括所有的。net代码,VB6代码附带的ZIP文件,花点时间去浏览它们。 历史 2007年5月31日——原始版本发布 本文转载于:http://www.diyabc.com/frontweb/news2271.html