我可以在vb.net Windows窗体应用程序中使用COleControlModule吗?

时间:2019-06-11 16:22:31

标签: c++ winforms activex

我正在升级Windows窗体应用程序。该应用程序使用活动的x控件(ocx)文件。我们已经获得了ocx进行编译并可以注册它。 C ++活动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窗体控件不兼容。有什么我可以做的吗?
任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

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

步骤是:

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

对ActiveX控件的引用将添加到该项目中,如使用Adobe 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)。这些将在项目参考下的“解决方案视图”中可见。