【问题标题】:Can I use COleControlModule in a vb.net windows forms app?我可以在 vb.net windows 窗体应用程序中使用 COleControlModule 吗?
【发布时间】:2019-06-17 04:09:30
【问题描述】:

我正在升级 Windows 窗体应用程序。该应用程序使用活动 x 控件 (ocx) 文件。我们已经让ocx编译并可以注册它。 C++ active x 控件项目中的主要类是 COleControlModule。当我像这样将控件添加到 Windows 窗体应用程序时

Me.Controls.Add(Me.ActiveXClass)

我明白了

Unable to cast COM object of type 'System.__ComObject' to class type 
'System.Windows.Forms.Control'. 

我知道活动的 x 类是一个 com 对象,并且我知道这个 COleControlModule 类不能与 Windows 窗体控件兼容。我能做些什么来完成这项工作吗?
非常感谢任何帮助。

【问题讨论】:

  • 使用 Aximp.exe 围绕 ActiveX 控件生成 Windows 窗体控件包装。在 Visual Studio WinForms 应用程序中,您可以通过在解决方案管理器的项目引用中添加对 ActiveX 控件的引用来自动完成此操作。
  • 它需要一个 AxHost 才能找到一个幸福的家。最简单的生成方法是先将其添加到工具箱中。右键单击 > 选择项目 > 浏览选项卡。
  • @R.J.Dunnill 如果你写了这个+几个步骤在你的答案中做什么,它可能会更受欢迎。
  • @πάντα ῥεῖ 答案已删除。
  • @R.J.Dunnill 是的,知道(我可以看到您删除的答案)。您仍然可以编辑以改进它,并取消删除它。

标签: c++ winforms activex


【解决方案1】:

这不起作用,因为运行时可调用包装器 (RCW) 不是 Windows 窗体控件。只有 Windows 窗体控件可以工作;要将 ActiveX 控件与窗体一起使用,您必须为 ActiveX 控件生成 Windows 窗体包装器。这是通过 Aximp.exe 完成的,通常是按照 Hans 的建议将控件添加到工具箱,然后将控件的实例拖到表单中。

步骤如下:

  1. 从“工具”菜单或右键单击“工具”选项卡中选择“选择项目”
  2. 选择 COM 组件选项卡
  3. 直接从列表中或通过“浏览”按钮选择 ActiveX 控件
  4. 在“工具”对话框中,用鼠标选择新添加的组件并将其拖到表单中。

将对 ActiveX 控件的引用添加到项目中,如本示例中的 Adob​​e PDF 阅读器:

 <ItemGroup>
    <COMReference Include="AcroPDFLib">
      <Guid>{05BFD3F1-6319-4F30-B752-C7A22889BCC4}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </COMReference>
    <COMReference Include="AxAcroPDFLib">
      <Guid>{05BFD3F1-6319-4F30-B752-C7A22889BCC4}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>aximp</WrapperTool>
      <Isolated>False</Isolated>
    </COMReference>
  </ItemGroup>

注意有两个条目,一个用于生成运行时可调用包装器(通过 tlbimp),另一个用于生成 AxImp 包装器(通过 aximp)。这些可以在解决方案视图中的项目引用下查看。

【讨论】:

  • R.J.如果我更改活动 x 控件,我必须做些什么吗?如果我添加一个方法,我是否必须对 Aximp 执行任何操作才能在 windows 窗体中查看和使用该方法?
  • 你的意思是修改ActiveX控件吗?重建应该强制重新生成所有包装器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多