我是一位长期的Delphi开发人员,他被分配了一个为WinXP 32位构建的VB.NET应用程序,以便在Win7 +和64位平台上工作。我没有使用Basic,因为CP / M天和几乎没有使用任何MS开发环境,但是已经参加了DevU入门VB课程,所以我对语法有了一些掌握,但我和# 39; m主要是因为VS如何将项目整合到一个应用程序中而迷失了。我在Win7 64位系统上使用VS 2010(以管理员身份运行),项目设置为x86平台。
该应用程序使用一些内部开发的ActiveX控件,一个用于通过mfgr提供的驱动程序连接外部工业硬件,另一个用于管理这些驱动程序使用的注册表中的配置设置。这两个OCX都通过Regsvr32成功注册。
我可以看到IDE构建了4个互操作DLL来处理这2个OCX。该应用程序在IDE中成功构建并在运行时启动,但主窗体显示为空白 - 没有显示菜单项,工具栏等。并且主要形式不会在设计器中加载 - 它不会给出错误消息,只是加载设计器源而不是可视化设计器形式。无论是为调试还是发布而构建,这种行为都是相同的。
通过尝试注释掉部分设计器代码,我将实例化OCX对象的InitializeComponent()方法中的行的失败隔离开来:
Me.AxDiamondctrl1 = New AxDIAMONDCTRLLib.AxDiamondctrl()
Me.AxDiamondsetupctrl1 = New AxDIAMONDSETUPCTRLLib.AxDiamondsetupctrl()
当应用程序运行时,对这两个对象字段的引用将作为空引用异常失败。我假设因为这些调用在InitializeComponent()的早期失败,表单上的其余可视组件没有正确设置,导致空白主表单,但由于我不能单步执行设计师代码我无法肯定地说出来。
为了确认OCX本身已经注册并正确加载,我在Delphi中编写了一个小型测试应用程序,它加载并调用其中的几个方法/属性 - 测试程序按预期工作。所以我假设这些IDE生成的互操作DLL是如何构建的,或者在IDE / app查找/加载它们中存在一些缺陷。但我不知道是什么原因或如何解决它。我也很好奇为什么生成互操作DLL(每个OCX中有2个) - Delphi不需要这样的额外助手,它只是从类型库中构建适当的代码。
谢谢!
史蒂夫