我正在升级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窗体控件不兼容。有什么我可以做的吗?
任何帮助将不胜感激。
答案 0 :(得分:-1)
这不起作用,因为运行时可调用包装程序(RCW)不是Windows Forms控件。仅Windows窗体控件将起作用;若要将ActiveX控件与窗体一起使用,必须为ActiveX控件生成Windows窗体包装器。这是通过Aximp.exe完成的,通常是按照Hans的建议,将控件添加到“工具箱”中,然后将控件的实例拖动到表单中。
步骤是:
对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)。这些将在项目参考下的“解决方案视图”中可见。