2013-10-08 94 views
0

后从MFC工作我有VB6的ActiveX(例如MyActiveX),其被从MFC使用:VB6的ActiveX停止破坏兼容性

m_pControl = new CWnd; 
m_pControl->CreateControl("MyActiveX.MainControl", 
          "", 
          WS_VISIBLE, 
          rc, 
          this, 
          5000, 
          NULL, 
          FALSE, 
          NULL); 

当我删除一些未使用功能或移动变量(VB的ActiveX外不使用),VB6警告打破兼容性。我选择了打破兼容性,但现在VB6 ActiveX不能正确显示在MFC应用程序中。

据我所知,破坏兼容性将为接口和类型库创建新的UUID。这是好的,只要我可以做一些事情,使其再次工作,并且由于我使用字符串ProgID MyActiveX.MainControl,我认为我的MFC应用程序不应该受到影响。

编辑:
正如我从Resetting project compatibility in vb6明白,破坏兼容性是好的,只要我重建引用它的项目。但是从MFC中,我只使用字符串MyActiveX.MainControl来引用VB项目,所以我不明白为什么我应该重建我的MFC应用程序;甚至在重建我的C++ MFC应用程序之后,VB ActiveX仍未正确显示。

在C++ MFC端实际使用的VB6 ActiveX中只有两个函数。这就是为什么我删除/移动了一些其他函数和变量,这些函数和变量只能在VB6 ActiveX中使用。所以我不知道为什么它停止正常显示

回答

0

没有。VB6是正确的。问题是关于你使用的接口,属性和事件。这取决于如何将控件集成到MFC中。只要所有DispIds(来自IDispatch接口的调度ID)都是稳定的,并且只要您使用的所有函数仍然可用,就没有问题。

如果DispID正在改变,函数原型会改变,您将进入Problems。

+0

嗨,谢谢你的回答。 VB6 ActiveX中只有两个实际从C++ MFC端使用的函数。这就是为什么我删除/移动了一些其他函数和变量,这些函数和变量只能在VB6 ActiveX中使用。所以我不确定为什么它停止正确显示。 –

+0

在OleViewer中检查旧界面和新界面。只要你使用相同的DispIds,你就没有问题。 – xMRi