Winform引用Activex控件

今天写了两个简单的Activex控件,一个用的MFC,一个用的ATL

用MFC的控件,编译后,直接引用就可以使用了。

用ATL写的控件,编译后,可以添加到VC程序中使用,但在WinForm程序中不可以使用,从工具箱拖拽到form后会报下面的错误:

Failed to create component 'AxHost'.  The error message follows:
 'System.InvalidOperationException: Unable to initialize component.
   at System.Windows.Forms.AxHost.DepersistControl()
   at System.Windows.Forms.AxHost.ActivateAxControl()
   at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
   at System.Windows.Forms.AxHost.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.ControlCollection.Add(Control value)
   at System.Windows.Forms.Form.ControlCollection.Add(Control value)
   at System.Windows.Forms.Design.ParentControlDesigner.AddChildControl(Control newChild)
   at System.Windows.Forms.Design.ParentControlDesigner.AddControl(Control newChild, IDictionary defaultValues)
   at System.Windows.Forms.Design.ControlDesigner.InitializeNewComponent(IDictionary defaultValues)
   at System.Windows.Forms.Design.AxHostDesigner.InitializeNewComponent(IDictionary defaultValues)'

查找了半天,有人说用AxImp.exe生产一个代理类可以解决这个问题。
尝试了SDK7.0,SDK7.1,SDK8.0,SDK8.1的AxImp.exe,可以成功生成dll,但是仍然没法使用。

也有人说,可以通过降低.NetFramework版本解决这个问题,2.0,3.0,3.5我都试了下,都不行。

试了VS2010和VS2013都不行,累了,回去了。。。

明天有空再弄吧。。。

今天试了一下,微软你大爷的,同样的操作,VS2008上(XP和Win7)就是好的。。。
真够坑爹啊。。。

再次测试表明:
1、VS2008的ATL控件在高版本的VS上可以插入到WinForm
2、VS2010以上的ATL控件,不能插入到VS2008以上任何版本的WinForm

VS2010以上的ATL控件,插入VS2008时,报的错误与上面不同

Debug Assertion Failed!
Program:.......
File:......vc\atlmfc\include\atlctl.h

Expression:pClientSite == 0 || m_spClientSite == 0

For information on how ....

微软,你自己的产品,兼容性做好一些,你能死啊。。。

Leave a Reply

Your email address will not be published. Required fields are marked *

*