打破兼容性后,VB6 ActiveX从MFC停止工作

时间:2013-10-08 03:47:05

标签: visual-c++ mfc vb6 activex vc6

我有从MFC使用的VB6 ActiveX(例如MyActiveX):

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

当我删除一些未使用的函数或移动变量(未在VB ActiveX之外使用)时,VB6会警告打破兼容性。我选择破坏兼容性,但现在从MFC应用程序中无法正确显示VB6 ActiveX。

据我了解,断开兼容性将为接口和类型库创建新的UUID。只要我可以做一些事情让它再次工作,这很好,因为我使用字符串ProgID MyActiveX.MainControl,我认为我的MFC应用程序不会受到影响。

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

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

1 个答案:

答案 0 :(得分:0)

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

如果DispID正在改变,函数原型会发生变化,您将遇到问题。